【Mybatis】——Mybatis逆向工具VS通用Mapper逆向工具

    公司中使用的SSM框架,其中关于Mybatis逆向工程这一部分是经理之前自己封装的工具,经常改表结构,这个工作一直在反复的重复,说实话小编的觉得有点烦啊。每次都好多文件,粘过来粘过去,唉,虽然麻烦,但是也很佩服经理的技术能力,毕竟我写起来还有点小困难。

Mybatis逆向工具

     其实mybatis官方提供了逆向工程,用于解决这种重复的工作。而且生成模板有两种,一种是MyBatis3Simple简单版仅生成CRUD,另一种MyBatis3豪华版,豪华版带条件的增删改查。

使用Mybatis逆向工程的配置文件如下mbg.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>
    <!-- 
        targetRuntime="MyBatis3Simple":生成简单版的CRUD
        MyBatis3:豪华版带条件的增删改查
     -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- jdbcConnection:指定如何连接到目标数据库 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true"
                userId="root"
                password="123456">
        </jdbcConnection>

    <!-- -->
        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

    <!-- javaModelGenerator:指定javaBean的生成策略 
    targetPackage="test.model":目标包名
    targetProject="\MBGTestProject\src":目标工程
    -->
        <javaModelGenerator targetPackage="com.atguigu.mybatis.bean" 
                targetProject=".\src">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

    <!-- sqlMapGenerator:sql映射生成策略: -->
        <sqlMapGenerator targetPackage="com.atguigu.mybatis.dao" 
            targetProject=".\conf">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

    <!-- javaClientGenerator:指定mapper接口所在的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.**.mybatis.dao" 
            targetProject=".\src">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

    <!-- 指定要逆向分析哪些表:根据表要创建javaBean -->
        <table tableName="tbl_dept" domainObjectName="Department"></table>
        <table tableName="tbl_employee" domainObjectName="Employee"></table>
    </context>
</generatorConfiguration>

启动测试类,直接生成

    @Test 
    public void testMbg() throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("mbg.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                callback, warnings);
        myBatisGenerator.generate(null);
    }

生成内容包含四部分

1、***POJO.java

2、***Example.java

3、***Mapper.java

4、***Mapper.xml

Mybatis逆向工具不足之处

    因为封装了一些方法,所以在.java文件和.xml文件中会有一些不需要开发人员修改的内容,从程序设计的角度来说应该对这一部分关闭修改。而且Example.java文件内容基本没有改动,但是会因为表结构的修改而重新覆盖该文件,这一部分工作对应程序开发是重复的,所以应该想办法尽量避免。

    正因为Mybatis本身提供逆向工具存在的问题,所以通用Mapper在Mybatis的基础上完善,来解决这些重复的问题。而且这是一位中国人封装的,所以学习成本极低。

通用Mapper逆向工具

作用:替我们生成常用增删改查操作的SQL语句

官方发布地址:

https://gitee.com/free

https://gitee.com/free/Mapper/wikis/1.1-java?parent=1.integration

通用Mapper逆向工具配置使用

pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.atguigu.mapper.mbg</groupId>
        <artifactId>Pro02MapperMBG</artifactId>
        <version>0.0.1-SNAPSHOT</version>

        <properties>
                <!-- ${basedir}引用工程根目录 -->
                <!-- targetJavaProject:声明存放源码的目录位置 -->
                <targetJavaProject>${basedir}/src/main/java</targetJavaProject>

        <!-- targetMapperPackage:声明MBG生成XxxMapper接口后存放的package位置 -->
        <targetMapperPackage>com.atguigu.shop.mappers</targetMapperPackage>

        <!-- targetModelPackage:声明MBG生成实体类后存放的package位置 -->
        <targetModelPackage>com.atguigu.shop.entities</targetModelPackage>

        <!-- targetResourcesProject:声明存放资源文件和XML配置文件的目录位置 -->
        <targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject>

        <!-- targetXMLPackage:声明存放具体XxxMapper.xml文件的目录位置 -->
        <targetXMLPackage>mappers</targetXMLPackage>

        <!-- 通用Mapper的版本号 -->
        <mapper.version>4.0.0-beta3</mapper.version>
        <!-- MySQL驱动版本号 -->
        <mysql.version>5.1.37</mysql.version>
        </properties>
        <dependencies>
                <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.0.0-beta3</version>
                </dependency>
                <dependency>
                        <groupId>org.mybatis</groupId>
                        <artifactId>mybatis</artifactId>
                        <version>3.2.8</version>
                </dependency>
                <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                </dependency>
        </dependencies>
        <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>
</project>

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>
        <!-- 引入外部属性文件 -->
        <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}" />

        <!-- 配置XxxMapper.xml存放位置 -->
        <sqlMapGenerator 
                targetPackage="${targetXMLPackage}"
                targetProject="${targetResourcesProject}" />

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

        <!-- 根据数据库表生成Java文件的相关规则 -->
        <!-- tableName="%"表示数据库中所有表都参与逆向工程,此时使用默认规则 -->
        <!-- 默认规则:table_dept→TableDept -->
        <!-- 不符合默认规则时需要使用tableName和domainObjectName两个属性明确指定 -->
        <table tableName="tabple_emp" domainObjectName="Employee">
                <!-- 配置主键生成策略 -->
                <generatedKey column="emp_id" sqlStatement="Mysql" identity="true" />
        </table>
        </context>
</generatorConfiguration>

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这一级目录的命令行窗口中执行如下命令即可

mvn mybatis-generator:generate

生成内容为三部分

1、**POJO.Java

2、***Mapper.java

3、***Mapper.xml

相比mybatis逆向工具优点

     在***Mapper.java类继承了Mapper<T>类,这样那些不需要修改的内容,封装到一个独立类中,具有通用性,因为这种封装,在**Mapper.xml文件中没有了那些封装好的sql,减少不需要改动的类**Example.java,最大程度的对修改关闭,同时还可以将自定义扩展Mapper类,来满足项目的需要。

总结

    

   如果公司内部封装的逆向工具没有理想那么优秀,推荐使用通用Mapper进行替代,减少开发过程不必要的操作,而且便捷灵活。

猜你喜欢

转载自blog.csdn.net/jiadajing267/article/details/80960622
今日推荐