如果你所在的公司还是在用原始的MyBatis,没有使用通用Mapper,这篇文章将让你学会如何快速构建最基本的DAO层所需的Mapper接口、POJO、XML文件。
如果你们已经使用通用Mapper,请看TkMapper Generator,同样能帮你减少一部分工作量。
本文的配置,默认不会覆盖原有Java文件,而XML文件会追加(第二次生成的sql语句会在用一个文件中追加)。
建议大家单独创建一个逆向工程,生成文件并修改无误后再拷贝到项目中。**
另外,当你发现本文的配置无法满足你的项目需求时,可以自行百度解决问题。比如你想自动生成Example相关语句,可以搜索“Mybatis Generator不生成Example怎么办”。
环境准备
Pom里的plugin依赖
<build><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.6</version><configuration><verbose>true</verbose><!-- 代表mybatis generator生成的内容不要覆盖已有的内容 --><overwrite>false</overwrite></configuration><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version></dependency></dependencies></plugin</plugins></build>
在resources目录下放置generatorConfig.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>
<!-- defaultModelType="hierarchical"则POJO会同时生成xxxKey,targetRuntime="MyBatis3Simple"不会生成insertSelective之类方法 -->
<context id="mysql" defaultModelType="flat" targetRuntime="MyBatis3">
<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表; 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
<property name="autoDelimitKeywords" value="false"/>
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 注释生成器 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 必须要有的,使用这个配置链接数据库 @TODO:是否可以扩展 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql:///test" userId="root" password="root">
<!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
</jdbcConnection>
<javaTypeResolver>
<!--
true:使用BigDecimal对应decimal(小数)和 numeric(数字)数据类型
false:默认,
scale>0;length>18:使用BigDecimal;
scale=0;length[10,18]:使用Long;
scale=0;length[5,9]:使用Integer;
scale=0;length<5:使用Short;
-->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- java模型创建器,是必须要的元素 负责:1,key类(见context的defaultModelType);2,java类;3,查询类
targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制; targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录 -->
<javaModelGenerator targetPackage="com.bravo.web.bean.superman" targetProject="src/main/java">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true"/>
<!-- 设置是否在setter方法中,对String类型字段调用trim()方法(如果你用Lombok,忽略这个) -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成SQL map的XML文件生成器, 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
targetPackage/targetProject:同javaModelGenerator -->
<sqlMapGenerator targetPackage="com.bravo.web.mapper.superman"
targetProject="src/main/java">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 targetPackage/targetProject:同javaModelGenerator
type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER -->
<javaClientGenerator targetPackage="com.bravo.web.mapper.superman"
type="XMLMAPPER" targetProject="src/main/java">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true"/>
<!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查 <property name="rootInterface"
value=""/> -->
</javaClientGenerator>
<!-- 四个false禁止接口生成Example相关语句,如果需要请删除 -->
<table tableName="t_tip_content"
delimitIdentifiers="true"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false">
<!-- 参考 javaModelGenerator 的 constructorBased属性 -->
<property name="constructorBased" value="false"/>
<generatedKey column="id" sqlStatement="JDBC"/>
<!-- 把生成的POJO、Mapper接口、Mapper.xml名字的前缀T去掉(t_tip_content 输出 TTipContent) -->
<domainObjectRenamingRule searchString="^T" replaceString="" />
</table>
</context>
</generatorConfiguration>
数据库SQL
CREATE TABLE `t_tip_content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`title_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
逆向生成
修改配置
- 数据库连接

- 指定生成后的POJO存放位置

- 指定Mapper.xml存放位置

- 指定Mapper接口存放位置

执行命令

效果展示
POJO


Mapper接口、Mapper.xml



弄完了自己打开看看,把需要改的字段改改,该写的注释写写,不要太相信自动生成的东西。
