mybatis-generator是一款在使用mybatis框架时,根据我们的数据库表,自动生成对应model,dao和mapper的工具,很大程度上减少了业务开发人员的手动编码时间,接下来我们来了解它的用法。
在pom.xml中添加插件
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--配置文件存放的位置,一般不用配置,它会自动到这个位置去寻找-->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<!--是否覆盖,新生成的mapper接口\java类\mapper文件会覆盖老的-->
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
配置generatorConfig.xml文件
- 只需要把generatorConfig.xml放在maven工程的src/main/resources下就可以自动读取
- 注意:下面配置的标签是有顺序的
<?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>
<!-- 在MBG工作的时候,需要额外加载的依赖包
location属性指明加载jar/zip包的全路径,注意版本-->
<classPathEntry location="C:\Users\L7832\Desktop\project\mysql-connector-java-8.0.17.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--不再追加xml内容,我们在插件中设置了新生成的mapper接口\java类\mapper文件会覆盖老的,
但是我们发现mapper.xml文件并不是覆盖,而是追加 。因为只有加了下面这个插件后才能覆盖-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
<!--当suppressAllComments设置为true的时候,生成的文件中就不会有注解了,使得代码更清爽-->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 必须要有的,使用这个配置链接数据库-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/mall?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false"
userId="root"
password="4589856">
<!--解决mysql8.x驱动会生成用户下多个库下表的问题,true表示只生成connectionURL指定数据库下的表,而不是userId用户能看到的所有数据库中同名的表。
例如:root用户下有db1和db2两个数据库,这两个库中都有tb_user表,当nullCatalogMeansCurrent设置为false时,
尽管connectionURL指定的是db1数据库,但是db2数据库中的tb_user表同样也会生成对应的实体类-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- java类型处理器
用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;
注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型;
-->
<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模型创建器,是必须要的元素(创建java类)
targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录(不用改)
targetProject/targetPackage就是我们要生成的java类放在哪个目录下(src/main/java/com.lxc.mall.pojo)
-->
<javaModelGenerator targetPackage="com.lxc.mall.pojo" targetProject="src/main/java">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true" />
<!--因为我一般使用Lombok来生成getter\setter,所以不要这个设置-->
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<!--<property name="trimStrings" value="true" />-->
</javaModelGenerator>
<!-- 生成SQL map的XML文件生成器(创建mapper文件)
targetPackage/targetProject就是我们要生成的mapper文件放在哪个目录下(src/main/resources/mapper)
-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成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 type="XMLMAPPER" targetPackage="com.lxc.mall.dao" targetProject="src/main/java">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- tableName:数据表名字 domainObjectName:java类名 enable***ByExample:这些都是生成跟分页有关的东西,我们不需要自动生成这些,把这4个属性设置为false-->
<table tableName="mall_shipping" domainObjectName="Shipping" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false">
<!--这个字段在数据库中是text类型,我们必须为它重新设置类型,才能使数据库中字段都映射生成在一个pojo类中-->
<columnOverride column="detail" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
这里只罗列了日常使用的配置,其实只要这些也足够。详细配置参考Mybatis Generator最完整配置详解
使用命令执行插件
在项目根目录下执行mvn mybatis-generator:generate
命令,这个命令可以在cmd中执行,也可以直接在IDEA的Terminal窗口中执行。