Spring中使用MyBatis Generator
简介
MyBatis Generator 是由MyBatis官方提供的MyBatis代码生成器。可以根据数据库表生成相关代码,比如POJO、Mapper接口、SQL Map xml等。
使用方式
MBG提供了多种的不同场景下的使用方式。
- 命令行方式
- maven 插件方式
- eclipse 插件方式
- Java程序
- ant task
配置MBG
MBG所有的配置都是在xml文件里做的。有如下几部分:
- generatorConfiguration
- context
- jdbcConnection
- javaModelGenerator
- sqlMapGenerator
- javaClientGenerator(ANNOTATEDMAPPER、XMLMAPER、MIXEDMAPPER)
- ANNOTATEDMAPPER:使用注解方式
- XMLMAPER:使用xml方式
- MIXEDMAPPER:使用混合方式,复杂的使用xml方式、简单的使用注解方式
 
- table
 
一个大的generatorConfiguration,里面回对上下文做些配置。
可以使用的插件
MBG内置了很多插件,我们可以按照需要配置在配置文件中处理我们的需求。内置的插件都在org.mybatis.generator.plugins包中。
- FluentBuilderMethodsPlugin
- ToStringPlugin
- SerializablePlugin
- RowBoundsPlugin
另外我们也可以自定义实现使用自己的插件。
使用
这里以maven插件的方式为例,在Spring中使用MBG,并且使用自己定义的插件(主要用来解决,MyBatis Generator每次生成代码会覆盖原来的sql问题。解决方案也简单:在默认生成的代码文件的基础上,在增加一套扩展的、自己业务里使用的xxxMapper.java和xxxMapper.xml)。
添加依赖
在maven项目的pom文件里添加相关依赖和插件
				<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.4</version>
        </dependency>
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.5</version>
          <dependencies>
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>8.0.11</version>
              <scope>runtime</scope>
            </dependency>
            <dependency>
              <groupId>com.lucky</groupId>
              <artifactId>mybatis-generator-extend</artifactId>
              <version>1.0-SNAPSHOT</version>
            </dependency>
          </dependencies>
          <configuration>
            <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
            <verbose>true</verbose>
            <overwrite>true</overwrite>
          </configuration>
        </plugin>
如上分别是mybatis在Spring中使用的依赖,以及MyBatis Generator的插件。同时由于我们使用自己的插件,这里把插件的依赖mybatis-generator-extend也添加了进来。
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>
    <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
        <!--自定义插件-->
        <plugin type="com.lucky.plugin.AddExtendDaoPlugin">
            <property name="baseDir" value="${mybatis.plugin.base.dir}"/>
            <property name="targetProject" value="src/main/java"/>
            <property name="targetProjectXml" value="src/main/resources"/>
            <property name="mapperPackage" value="${mybatis.plugin.mapper.package}"/>
            <property name="mapperXmlPackage" value="${mybatis.plugin.mapperXml.package}"/>
        </plugin>
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/readinglist?serverTimezone=Asia/Shanghai&nullNamePatternMatchesAll=true&nullCatalogMeansCurrent=true&useSSL=false"
                        userId="root"
                        password="12345678">
            <!--<property name="nullCatalogMeansCurrent" value="true"/>-->
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="${mybatis.plugin.model.package}" targetProject="./src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="${mybatis.plugin.mapperXml.package}" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="${mybatis.plugin.mapper.package}"
                             targetProject="./src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="t_coffee" domainObjectName="Coffee"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"
        >
        </table>
    </context>
</generatorConfiguration>
如上就是MBG使用的配置文件参数的配置。和常规使用不同的就是添加了自定义的插件。
定义属性值
在配置文件中,有些值的定义是通过属性配置的。这里需要将其进行配置。
    <properties>
        <mybatis.plugin.base.dir>${basedir}</mybatis.plugin.base.dir>
        <!--映射文件目录-->
        <mybatis.plugin.mapper.package>com.lucky.spring.dao</mybatis.plugin.mapper.package>
        <!--映射文件对应的xml目录-->
        <mybatis.plugin.mapperXml.package>mapper</mybatis.plugin.mapperXml.package>
        <!--pojo目录-->
        <mybatis.plugin.model.package>com.lucky.spring.model</mybatis.plugin.model.package>
    </properties>
执行插件
在上面所有配置都配置完成后,执行mybatis-generator:generate这个goal来生成对应文件。

生成的两个扩展文件分别是xxXMapperExt.java和xxXMapperExt.xml两个文件。自己业务的实现就放到这两个文件里就可以了。当表设计变动时再次执行这两个扩展不会被覆盖。


 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号