参考
李晨玮 - 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
官方文档, 这里包含了每个部分的配置详情.
MyBatis Generator下载地址
配置文件 generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--数据库驱动-->
<!--注意要保证运行MyBatis Generator的时候能够找到mysql的connector-->
<!-- location The full path name of a JAR/ZIP file to add to the classpath, or a directory to add to the classpath.-->
<classPathEntry location="mysql-connector-java-6.0.6.jar"/>
<!-- A unique identifier for this context. This value will be used in some error messages. -->
<context id="mysql2java" targetRuntime="MyBatis3">
<!-- http://www.mybatis.org/generator/configreference/commentGenerator.html -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/syllabus" userId="username" password="password">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成Model类存放位置-->
<!-- targetProject 指定存放生成文件的根目录-->
<javaModelGenerator targetPackage="me.xiaofud.model" targetProject="src">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="me.xiaofud.mapping" targetProject="src">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成Dao类存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="me.xiaofud.dao" targetProject="src">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--配置MBG对哪个数据表进行生成工作, 对于MYSQL数据库来说, 因为没有SCHEMA这个概念, 必须使用catalog来指定到底用哪个数据库, 否则如果多个数据库有同名表, MYBATIS会自己选一个-->
<table tableName="users" catalog="syllabus" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="posts" catalog="syllabus" domainObjectName="Post" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
对于MYSQL
的使用, 有几点需要注意的地方. 在我的实际使用中, 即使connectionURL
中指定了需要连接的数据库
, 如果在后面的<table>
中不指定catalog
, 而且在多个database
中有相同名字的table
的话, 那么MBG
会给出警告, 但是它会直接自己选择一个table
, 往往不是自己想要指定的表.
使用catalog
能奏效, 灵感来源于https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html,
如果没有指定catalog
而又有多张同名的表, 则会出现以下警告:
Table Configuration syllabus.users matched more than one table (java_web..users,shop..users,syllabus..users,laravel_blog..users,performance_schema..users,hr_qa..users)
MYSQL文档:
If the database is not specified, the connection is made with no default database. In this case, either call the setCatalog() method on the Connection instance, or fully specify table names using the database name (that is, SELECT dbname.tablename.colname FROM dbname.tablename...) in your SQL. Opening a connection without specifying the database to use is generally only useful when building tools that work with multiple databases, such as GUI database managers.
运行
目录结构如下:
.
├── generatorConfig.xml
├── mybatis-generator-core-1.3.5.jar
├── mysql-connector-java-6.0.6.jar
└── src
执行:
java -jar mybatis-generator-core-1.3.5.jar -configfile generatorConfig.xml -overwrite
overwrite
参数含义如下:
This will tell MBG to run using your configuration file. It will also tell MBG to overwrite any existing Java files with the same name. If you want to save any existing Java files, then omit the -overwrite parameter. If there is a conflict, MBG will save the newly generated file with a unique name (e.g. MyClass.java.1).