公司中使用的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类,来满足项目的需要。

总结

    

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

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