简述
MyBatis Generator (简称 MBG)is a code generator for MyBatis. 可以根据数据库中的表生成相应的实体类以及一些常用的增删改查方法。
使用 MBG 会生成以下三类文件:
- Java POJOs that match the table structure
- MyBatis/iBATIS Compatible SQL Map XML Files
- Java client classes that make appropriate use of the above objects
三类文件中又有一些小类,可以去 MBG 官网查看,重点说下第二类,第二类中生成的 XML 文件中,会有许多的 CRUD 的 SQL 语句,包括以下内容:
- insert
- update by primary key
- update by example (using a dynamic where clause)
- delete by primary key
- delete by example (using a dynamic where clause)
- select by primary key
- select by example (using a dynamic where clause)
- count by example
上面这些 SQL 也会随着表的结构发生一些变化。例如假如某张表没有主键,那么就不会生成 update by primary 系列的 SQL 语句。
运行
MBG 有个核心配置文件 generatorConfig.xml 和一个 jar 包 mybatis-generator-core-x.x.x.jar,在命令行运行
java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml -overwrite
这个命令的作用是启动 jar 读取 xml 中的配置文件,配置文件有数据库的驱动存放位置,连接到数据库的信息,需要读取那些表格,生成的文件存放在那些位置,等等这些信息,然后生成相应的代码等文件放到指定位置。
上面这个 mybatis-generator-core-x.x.x.jar 文件的下载地址是:https://github.com/mybatis/generator/releases
官方文档中介绍了运行 MBG 的方式有五种:命令行方式,通过 Ant,通过 Maven,通过 Java 代码,通过 Eclipse 插件。
命令行方式也就是上面说的那种,其它四种原理也和命令行方式差不多。
实战
首先创建一个 spring boot 项目,添加 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> <classPathEntry location="D:developsoftwarepostgresql-42.2.5.jar"/> <context id="DB2Tables" targetRuntime="MyBatis3"> <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://localhost:5432/postgres" userId="postgres" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <javaModelGenerator targetPackage="com.company.laboratory.model" targetProject="D:developidea-workspacelaboratorysrcmainjava"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.company.laboratory.mapper" targetProject="D:developidea-workspacelaboratorysrcmain esources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.company.laboratory.mapper" targetProject="D:developidea-workspacelaboratorysrcmainjava"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="t_project_specific_budget" domainObjectName="ProjectSpecificBudget"> </table> </context> </generatorConfiguration>
目录结构如下图
需要额外添加的文件是数据库的驱动文件,我这里使用的 postgresql ,驱动文件的位置在 generatorConfig.xml 中 classPathEntry 中配置了。
然后命令行执行 java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml
即可生成相应的文件,生成后的文件目录如下:
如上图,新生成的文件已经用红框标出了。
上面的 generatorConfig.xml 文件配置仍然存在许多问题,xml 文件中具体每个元素的使用可以参考官方文档。
补充一个较为常用的 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> <classPathEntry location="D:developsoftwarepostgresql-42.2.5.jar"/> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://localhost:5432/postgres" userId="postgres" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <javaModelGenerator targetPackage="com.company.laboratory.model" targetProject="D:developidea-workspacelaboratorysrcmainjava"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.company.laboratory.mapper" targetProject="D:developidea-workspacelaboratorysrcmain esources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.company.laboratory.mapper" targetProject="D:developidea-workspacelaboratorysrcmainjava"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="t_table" domainObjectName="table" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" /> </context> </generatorConfiguration>
根据自己的项目稍微修改一下文件位置就可以使用了。
遇到这样一个问题 mybatis generator自动生成代码时,只生成了insert 而没有其他的,经过排查是因为表中没有设置主键。
参考: