mybatis的逆向工程
由于mybates支持定制化sql,存储过程以及高级映射的等的特点,目前已经成为java持久层的主流符的技术。平时的mybatis的配置文件,以及持久层的接口,经常让我们的开发人员感到困扰。为此mybatis
的团队开发了一个强大的代码生成器-Mybatis Generator,以下简称MBG 通常也叫mybatis的逆向工程,从下面几个方面来聊聊mybatis逆向工程的使用。
mybatis逆向工程的好处
-
可以生成数据库表中对应的实体类pojo
-
生成Mapper的接口类,Mapper的XML文件。这些文件包含了单表的基本的操作CRUD.
-
可以生成Example类,不过这个类型的类一般不会用到
可以看到MBG可以极大的程度上方便我们使用mybatis,简化大量的重复工作。当然,要想了解更多的信息,可以访问: http://www.mybatis.org/generator 来获得更多的信息。
自定义实现一个mybatis的逆向工程
1. 数据库建两张测试的表,sql语句如下:
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sno` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`student_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`grade` double NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `student_id`(`sno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for sys_course
-- ----------------------------
DROP TABLE IF EXISTS `sys_course`;
CREATE TABLE `sys_course` (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
`code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类别',
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '课程名',
`value` int(11) NOT NULL COMMENT '分数',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
2. 新建一个maven项目,并下载相应的依赖
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
</dependencies>
3. 在recourse下新建文件夹generator并在文件夹下创建逆向工程的配置文件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="MyBatis3Simple" defaultModelType="flat">
<!--注释生成器,并且禁止在注释中生成日期-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--连接数据库的详细信息-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybaties"
userId="root"
password="chen2908">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--配置生成的包名。可以根据自己的需求进行修改-->
<javaModelGenerator targetPackage="test.model" targetProject="srcmainjava">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--配置生成mapper.xml文件的位置-->
<sqlMapGenerator targetPackage="test.dao" targetProject="srcmainjava">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--设置生成Mapper接口 位置,这里采用XMLMAPPER 接口和XML 完全分离-->
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="srcmainjava">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--匹配数据库中所有的表-->
<table tableName="%">
<generatedKey column="id" sqlStatement="Mysql"/>
</table>
</context>
4. 创建逆向工程的启动类;
package chen.mybatis;
/**
* @Author Chen
* @Date 2020/3/15 20:26
* 读取MBG的配置生成代码
**/
public class Generator {
public static void main(String[] args) throws Exception{
// 警告信息
List<String> warnings = new ArrayList<String>();
// 当生成代码重复时,覆盖原代码
boolean overwrite = true;
// 读取配置文件
InputStream inputStream = Generator.class.getResourceAsStream("/generator/generatorConfig.xml");
ConfigurationParser configurationParser = new ConfigurationParser(warnings);
Configuration configuration = configurationParser.parseConfiguration(inputStream);
inputStream.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
// 创建MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration,callback,warnings);
// 执行生成代码的逻辑
myBatisGenerator.generate(null);
// 输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}
5.运行生成的代码如下所示:
这样就完成了代码的生成工作
配置文件generatorConfig.xml的具体说明
了解配置文件的具体配置的内容,可以更加方便的适应自己的开发需求。下面就对generatorConfig.xml配置文件的具体信息进行说明:
-
首要按照MBG 要求添加XML 文件头:
这个文件头中的mybatis-generator-config_1_0.dtd用来定义该配置文件中的标签和属性的。在文件头之后需要写上
<generatorConfiguration>
......
<generatorConfiguration>
-
context 属性 targetRuntime 设置为 MyBatis3Simple 防止生成与EXample相关的代码和方法,如果需要Example的代码,可以将其设置为 MyBatis3
-
context 属性 defalutModelType设置为 flat,目的是每个表只生成一个实体类。
-
注释生成器commentGenerator,并且禁止在注释中生成日期
-
jdbcConnection,配置连接数据库的信息
-
javaModelGenerator 配置生成的包名。可以根据自己的需求进行修改,这里配置的包是test.model。 targetProject配置子啊srcmainjava
-
sqlMapGenerator,配置生成mapper.xml文件的位置 这里配置在包test.dao下
-
javaClientGenerator Mapper接口的配置位置 这里配置在了test.dao下。
-
table 匹配数据库中的表,可以单表匹配,只需要将tableName的值改为表名就可以了,这里采用的通配符% 匹配所有的表、,并且指定所有的表都有主键id, 因为连接的是mysql的数据库,所以sqlStatement就设置为mysql.
参考书籍: 《mybatis从入门到精通》 刘增辉