通用Mapper(七)逆向工程

一、逆向工程

  1、原生 MyBatis 逆向工程与通用 Mapper 逆向工程对比

    

  2、参考文档地址

      Github地址:

      通用Mapper博客:https://mapperhelper.github.io/docs/

      MyBatis Generator 插件:https://mapperhelper.github.io/docs/3.usembg/

      Mybatis Geneator 详解:http://git.oschina.net/free/Mybatis_Utils/tree/master/MybatisGeneator/MybatisGeneator.md

  3、逆向工程创建(Maven方式)

    使用Maven插件的一个好处是可以将Maven中的属性使用${property}形式在generatorConfig.xml中引用。

    先看Maven的pom.xml文件(只显示有关的部分内容):

    (1)在 Maven的 pom.xml 中properties声明

    <properties>

        <!--
            ${basedir}:引用工程的根目录
            targetJavaProject:声明存放源码的目录位置
            targetMapperPackage:声明MBG生成xxxMapper接口后存放的package位置
            targetModelPackage:声明MBG生成实体类后存放的package位置

            targetResourcesProject:声明存放资源文件和XML配置文件的目录位置
            targetXMLPackage:声明存放具体XxxMapper.xml 文件的目录位置
        -->
        <!--  MyBatis Generator  -->
        <!--  Java接口和实体类  -->
        <targetJavaProject>${basedir}/src/main/java</targetJavaProject>
        <targetMapperPackage>com.njf.mapper.mappers</targetMapperPackage>
        <targetModelPackage>com.njf.mapper.model</targetModelPackage>
        <!--  XML生成路径  -->
        <targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject>
        <targetXMLPackage>mappers</targetXMLPackage>
        <!--  依赖版本  -->
        <!--
            mapper.version:通用mapper版本
        -->
        <mapper.version>4.0.0-beta3</mapper.version>
        <mysql.version>5.1.6</mysql.version>
    </properties>

      上面是pom.xml中properties配置的部分内容。这里配置了MBG配置文件中常用到的几个路径以及包名。还包含了通用Mapper的版本和数据库JDBC驱动的版本。 

    (2)在 pom 文件中添加 plugin 配置(MBG的Maven插件配置)

    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>

                <!--
                    配置generatorConfig.xml配置文件的路径
                -->
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>

                <!--
                    MBG插件的依赖信息
                -->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>${mapper.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

      这里配置了MBG插件,并且配置了generatorConfig.xml配置文件的路径。另外还有两个依赖,分别是JDBC驱动以及通用Mapper(提供了MBG插件)。     

  

    (3)逆向工程 generatorConfiguration.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>
    <!--
        引入外部属性文件
    -->
    <properties resource="config.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!--
            配置通用Mapper的MBG插件相关信息
        -->
        <plugin type="${mapper.plugin}">
            <property name="mappers" value="${mapper.Mapper}"/>
        </plugin>

        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.user}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <!--
            配置Java实体类存放位置
        -->
        <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/>

        <!--
            配置XML映射文件XxxMapper.xml的存放位置
        -->
        <sqlMapGenerator targetPackage="${targetXMLPackage}" targetProject="${targetResourcesProject}"/>

        <!--
            配置mapper接口XxxMapper.java存放位置
        -->
        <javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}"
                             type="XMLMAPPER"/>

        <!--
            根据数据库表生成Java文件的相关规则
            tableName="%" 表示数据库中所有的表都参与逆向工程,此时使用默认规则
            默认规则:table_depte  类名:TableDept

            不符合默认规则时需要使用tableName和 domainObjectName两个属性明确指定

            generatedKey:配置主键生成策略
        -->
        <table tableName="tabple_emp" domainObjectName="Employee">
            <generatedKey column="emp_id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

     可以看到这个配置文件中的大多数属性都使用${}形式替代了。使用<properties resource="config.properties"/>引入了config.properties属性配置,该文件内容如下:

      config.properties 配置信息

# 数据库配置
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/common_mapper
jdbc.user=root
jdbc.password=root

#c3p0
jdbc.maxPoolSize=50
jdbc.minPoolSize=10
jdbc.maxStatements=100
jdbc.testConnection=true

# 通用Mapper配置
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper=tk.mybatis.mapper.common.Mapper

      使用配置文件的目的是因为系统多处地方使用了这种配置,因而使用一个属性文件可以方便的保持一致。

      除了引用配置文件中的属性外,部分还使用了pom.xml中的属性。这种方式使用起来更灵活。

    (4)运行通用Mapper

      在pom.xml这一级目录的命令行窗口执行mvn mybatis-generator:generate即可(前提是配置了mvn)。

    (5)生成的资源

        

         EmployeeMapper 接口:

        

           接口自动继承配置的通用Mapper接口,自动包含泛型实体。

        Employee:

        

        EmployeeMapper.xml:

        

    xml文件只包含了实体的resultMap映射配置。 

  3、逆向工程测试

     @Test
     public void test() throws Exception {
         InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
         SqlSession sqlSession = sessionFactory.openSession();

         //**********************
         //按照Java方式整合通用Mapper的特殊设置
         //1.创建MapperHelper 对象
         MapperHelper mapperHelper = new MapperHelper();
         //2.通过MapperHelper 对象对MyBatis原生的Configuration对象进行处理
         mapperHelper.processConfiguration(sqlSession.getConfiguration());

         //**********************

         EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
         List<Employee> employees = mapper.selectAll();
         employees.forEach(System.out::println);
         sqlSession.close();
     }

    运行结果:

     可以看到,已经正确的查询到数据了

 

原文地址:https://www.cnblogs.com/niujifei/p/15286271.html