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,总结下该插件的使用及最佳实践.
需求
- 为数据库中的表teacher生成Teacher.java, TeacherMapper.java, TeacherMapper.xml
- 由于该插件生成的TeacherMapper.java, TeacherMapper.xml会带有example, 不希望生成example
- 数据库中的字段写有注释, 希望注释能自动生成在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
|
碰到的问题:
- Could not find artifact com.sun:tools:jar:0 at specified path…
平台: Mac
Jdk: 自带的jdk_1.6.0
解决办法: 安装jdk1.7, 该版本带有tools.jar
最佳实践
在以上三点需求完成后, 还可做以下修改使得开发更快更敏捷
- 配置文件中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();
}
}
|
参考资料
为Maven指定tools.jar ,解决Missing artifact com.sun:tools:jar:1.5.0错误
Maven Frequently Asked Technical Questions
MyBatis-Generator最佳实践的更多相关文章
- 30分钟带你了解Springboot与Mybatis整合最佳实践
前言:Springboot怎么使用想必也无需我多言,Mybitas作为实用性极强的ORM框架也深受广大开发人员喜爱,有关如何整合它们的文章在网络上随处可见.但是今天我会从实战的角度出发,谈谈我对二者结 ...
- MyBatis Generator 详解
MyBatis Generator中文文档 MyBatis Generator中文文档地址:http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中 ...
- MyBatis Generator 详解 【转来纯为备忘】
版权声明:版权归博主所有,转载请带上本文链接!联系方式:abel533@gmail.com 目录(?)[+] MyBatis Generator中文文档 运行MyBatis Generator X ...
- mybatis Generator配置文件详解
这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照. 1. 配置文件头 <?xml version="1.0" encoding="UTF-8&quo ...
- MyBatis Generator中文文档
MyBatis Generator中文文档 MyBatis Generator中文文档地址: http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看 ...
- MyBatis Generator 详解(转)
MyBatis Generator中文文档 MyBatis Generator中文文档地址:http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中 ...
- MyBatis Generator 详解 专题
idea中有plugin可提高效率: http://www.henryxi.com/use-idea-mybatis-plugin-generate-mapper-files eg: <?xml ...
- mybatis 3.x源码深度解析与最佳实践(最完整原创)
mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...
- java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】
一.概述 三款框架的功能对比 Mybatis-generator 通用Mapper Mybatis-Plus 代码生成器 支持自动生成Model,Mapper,Mapper XML文件 生成方式不够灵 ...
- java 搭建新项目,最佳组合:spring boot + mybatis generator
java 搭建新项目,最佳组合:spring boot + mybatis generator
随机推荐
- HTTPS-加密SSL证书
从第一部分HTTP工作原理中,我们可以了解到HTTPS核心的一个部分是数据传输之前的握手,握手过程中确定了数据加密的密码.在握手过程中,网站会向浏览器发送SSL证书,SSL证书和我们日常用的身份证类似 ...
- mybatis-config.xml 模板
ssm模板 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration ...
- .NetCore中使用AspectCore、ExceptionLess 实现AOP操作日志记录
结合前面封装的ExceptionLess,接下来使用 AspectCore 实现AOP日志处理 nuget导入AspectCore.Core .AspectCore.Extensions.Depend ...
- 【Atcoder】AGC027 题解
A - Candy Distribution Again 大意:有x个糖给n个小朋友,必须分完,小朋友得到糖数为一个确切值的时候小朋友会开心,求最多的开心数 题解 直接排序然后贪心分,如果分到最后一个 ...
- hadoop2.6.4集群的搭建
hadoop集群搭建(亲自操作成功步骤!值得信赖!) 1.1集群简介 hadoop的核心组件: HDFS(分布式文件系统) YARN(运算资源调度系统) MapReduce(分布式运算编程框架) HA ...
- Node.js包的依赖及版本号(转)
原文: http://www.cnphp6.com/archives/64130 Node.js最重要的一个文件就是package.json,其中的配置参数决定了功能.例如下面就是一个例子 { &q ...
- 使用Golang开发一个本地代理
引言 最近需要对接一个接口,人家提供了两种调用方式,第一种是基于IE浏览器的Active,第二种是动态链接库dll.我们公司的产品不支持IE,所以只能通过调用dll来完成了. 之前我已经用Java实现 ...
- Redis高可用之哨兵模式Sentinel配置与启动(五)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- EntityFramework笔记
参照文档:http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent.html 案例:http://pan.baidu.com/s/1c1Qgg28 ...
- 【HDU 3590】 PP and QQ (博弈-Anti-SG游戏,SJ定理,树上删边游戏)
PP and QQ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...