一、逆向工程
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映射配置。
4、逆向工程测试
@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();
}
运行结果:
可以看到,已经正确的查询到数据了