MyBatis-Generator最佳实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 引用地址:http://arccode.net/2015/02/07/MyBatis-Generator%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/ 最近使用MyBatis开发项目,为了快速开发,发现了一个可快速生成mapper类和mapper配置文件及Model的插件-MyBatis-Generator,总结下该插件的使用及最佳实践.

引用地址:http://arccode.net/2015/02/07/MyBatis-Generator%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/

最近使用MyBatis开发项目,为了快速开发,发现了一个可快速生成mapper类和mapper配置文件及Model的插件-MyBatis-Generator,总结下该插件的使用及最佳实践.

需求

  1. 为数据库中的表teacher生成Teacher.java, TeacherMapper.java, TeacherMapper.xml
  2. 由于该插件生成的TeacherMapper.java, TeacherMapper.xml会带有example, 不希望生成example
  3. 数据库中的字段写有注释, 希望注释能自动生成在Teacher.java中

实现

实现需求一

1> 建表-teacher

1
2
3
4
5
6
CREATE TABLE `test`.`teacher` (
`id` bigint NOT NULL DEFAULT 0 COMMENT '主键id',
`name` varchar(40) NOT NULL DEFAULT '' COMMENT '名称',
`age` smallint NOT NULL DEFAULT 0 COMMENT '年龄',
PRIMARY KEY (`id`)
) COMMENT= '教师表';

2> 配置properties常量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 数据库驱动jar 路径
drive.class. path=/Users/arccode/repo/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar
 
# 数据库连接参数
jdbc. driver=com.mysql.jdbc.Driver
jdbc. url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
jdbc. username=mysql
jdbc. password=mysqlpwd
 
# 包路径配置
model. package=com.arccode.web.model
dao. package=com.arccode.web.dao
xml.mapper. package=com.arccode.web.dao
 
target. project=src/main/java

3> 配置文件-generatorConfig.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?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 url="${mybatis.generator.generatorConfig.properties}"/>
 
<!--数据库驱动包路径 -->
<classPathEntry location="${drive.class.path}"/>
 
<context id="MySQLTables" targetRuntime="MyBatis3">
<!--关闭注释 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
</commentGenerator>
 
<!--数据库连接信息 -->
<jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>
 
<!--生成的model 包路径 -->
<javaModelGenerator targetPackage="${model.package}" targetProject="${target.project}">
<property name="enableSubPackages" value="ture"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
 
<!--生成xml mapper文件 路径 -->
<sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="${target.project}">
<property name="enableSubPackages" value="ture"/>
</sqlMapGenerator>
 
<!-- 生成的Dao接口 的包路径 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}" targetProject="${target.project}">
<property name="enableSubPackages" value="ture"/>
</javaClientGenerator>
 
<!--对应数据库表名 -->
<table tableName="teacher">
 
</table>
</context>
</generatorConfiguration>

4> 运行maven - Run As Maven build

Goals 参数 : mybatis-generator:generate -Dmybatis.generator.overwrite=true

实现需求二

修改配置文件-generatorConfig.xml, 将table标签修改如下

1
2
3
4
<table tableName="teacher" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
</table>

实现需求三

修改mybatis-generator源码

位置: mybatis-generator-core/src/main/java/org/mybatis/generator/internal/DefaultCommentGenerator.java

修改该类的方法: addFieldComment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void addFieldComment(Field field,
IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
 
StringBuilder sb = new StringBuilder();
 
field.addJavaDocLine( "/**"); //$NON-NLS-1$
// field.addJavaDocLine(" * This field was generated by MyBatis Generator."); //$NON-NLS-1$
 
sb. append(" * "); //$NON-NLS-1$
sb. append(introspectedColumn.getRemarks());
sb. append(",所属表字段为");
sb. append(introspectedTable.getFullyQualifiedTable());
sb. append('.');
sb. append(introspectedColumn.getActualColumnName());
field.addJavaDocLine(sb.toString());
 
// addJavadocTag(field, false);
 
field.addJavaDocLine( " */"); //$NON-NLS-1$
}

如果不想修改源码, 可以下载mybatis生成中文注释项目, maven本地安装后在pom中配置version即可.

使用git克隆github项目(mybatis-generator源项目)

1
2
3
4
5
6
7
8
// 克隆 parent
git clone https://github.com/mybatis/parent.git
// 将该项目安装到本地maven库, mybatis-generator依赖于该项目
mvn clean install -Dmaven.test.skip= true
// 克隆 mybatis-generator
git clone https://github.com/mybatis/generator.git
// 将该jar安装到本地, 之后项目中使用, 时间有点长, 可以喝杯咖啡
mvn clean install -Dmaven.test.skip= true

碰到的问题:

  1. Could not find artifact com.sun:tools:jar:0 at specified path…

平台: Mac

Jdk: 自带的jdk_1.6.0

解决办法: 安装jdk1.7, 该版本带有tools.jar

最佳实践

在以上三点需求完成后, 还可做以下修改使得开发更快更敏捷

  1. 配置文件中commentGenerator配置项最好不要设置为不生成注释,因为这样带来的问题是在自动生成的代码上不会存在@mbggenerated 这样的标记,这个标记是用来标注这些代码是代码生成器生成的,如果关闭了注释,我们在多次使用mybatis generator重新生成代码时会导致在已有生成的文件上追加生成重复的内容,导致代码错误,故我建议如果你只生成一次代码,以后再不用工具生成可以关闭注释,如果会重复生成就要把注释开关打开。以下配置参数是关闭时间注释:
1
2
3
<commentGenerator>
<property name="suppressDate" value="false"/>
</commentGenerator>

Model示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
 
public class Teacher {
 
/**
* 主键id,所属表字段为teacher.id
*/
private Long id;
 
/**
* 名称,所属表字段为teacher.name
*/
private String name;
 
/**
* 年龄,所属表字段为teacher.age
*/
private Short age;
 
/**
* 性别,所属表字段为teacher.sex
*/
private String sex;
 
/**
* 获取 主键id 字段:teacher.id
*
* @return teacher.id, 主键id
*/
public Long getId() {
return id;
}
 
/**
* 设置 主键id 字段:teacher.id
*
* @param id teacher.id, 主键id
*/
public void setId(Long id) {
this.id = id;
}
 
/**
* 获取 名称 字段:teacher.name
*
* @return teacher.name, 名称
*/
public String getName() {
return name;
}
 
/**
* 设置 名称 字段:teacher.name
*
* @param name teacher.name, 名称
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
 
/**
* 获取 年龄 字段:teacher.age
*
* @return teacher.age, 年龄
*/
public Short getAge() {
return age;
}
 
/**
* 设置 年龄 字段:teacher.age
*
* @param age teacher.age, 年龄
*/
public void setAge(Short age) {
this.age = age;
}
 
/**
* 获取 性别 字段:teacher.sex
*
* @return teacher.sex, 性别
*/
public String getSex() {
return sex;
}
 
/**
* 设置 性别 字段:teacher.sex
*
* @param sex teacher.sex, 性别
*/
public void setSex(String sex) {
this.sex = sex == null ? null : sex.trim();
}
}

参考资料

MyBatis Generator使用小记

为Maven指定tools.jar ,解决Missing artifact com.sun:tools:jar:1.5.0错误

Maven Frequently Asked Technical Questions

使用 OSC Maven 第三方仓库

MYBATIS GENEATOR 详解

mybatisn_generator_cn中文注释项目

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
Java 数据库连接 Spring
“探索Spring与MyBatis集成的最佳实践与技巧“(上)
“探索Spring与MyBatis集成的最佳实践与技巧“
231 0
|
6月前
|
SQL Java 数据库连接
MyBatis插件深度解析:功能、原理、使用、应用场景与最佳实践
MyBatis插件深度解析:功能、原理、使用、应用场景与最佳实践
|
Java 数据库连接 mybatis
“探索Spring与MyBatis集成的最佳实践与技巧“(下)
“探索Spring与MyBatis集成的最佳实践与技巧“
53 0
|
XML Java 数据库连接
深入浅出:MyBatis的使用方法及最佳实践
深入浅出:MyBatis的使用方法及最佳实践
MyBatis这样用,同事直呼哇塞,堪称最佳实践
MyBatis是一款非常流行的ORM框架,相信很多小伙伴都在使用。我们经常会把它和MyBatis-Plus或者MBG一起使用,用多了之后对于其一些常规操作就不太熟悉了。最近总结了下MyBatis的实用用法和技巧,希望对大家有所帮助!
|
SQL Oracle Java
MyBatis-最佳实践2
MyBatis-最佳实践2
MyBatis-最佳实践2
|
SQL 缓存 Java
MyBatis-最佳实践
MyBatis-最佳实践
MyBatis-最佳实践
|
SQL Java 数据库连接
MyBatis根据表结构自动生成PO/Mapper代码的最佳实践
MyBatis根据表结构自动生成PO/Mapper代码的最佳实践
1254 0
MyBatis根据表结构自动生成PO/Mapper代码的最佳实践
|
2月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
142 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
70 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块