使用Mybatis就一定离不开MyBatis Generator这款代码生成插件,而这款插件自身还提供了插件拓展功能用于强化插件本身,官方已经提供了一些拓展插件,本文介绍通过该插件机制来强化Mybatis Generator本身,方便和减少我们平时的代码开发量。
项目地址: https://github.com/chenanyu/mybatis-mbg-plugins


直接引入, 在pom.xml的相应节点中添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependencies>
<dependency>
<groupId>com.cayzlh</groupId>
<artifactId>plugins</artifactId>
<version>1.0</version>
</dependency>
</dependencies>

<repositories>
<repository>
<id>cayzlh-mvn-repo</id>
<name>cayzlh-mvn-repo</name>
<url>https://raw.github.com/chenanyu/mavenRepository/master/repository</url>
</repository>
</repositories>

或者, 下载代码, 编译后install到本地仓库

MBG的具体用法及配置文件等, 这里不做阐述, 查看 MBG官方文档 即可.
提供一个参考配置模板: generatorConfig.xml

在项目中使用

在pom.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
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<dependency>
<groupId>com.cayzlh</groupId>
<artifactId>plugins</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

生成代码

在idea的maven管理界面找到插件, 右键 - run.

生成代码
生成代码

然后, 生成的代码就到了你指定的目录了.

使用效果

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
/**
* Description:
* 用来测试mbg
*
* Table:
* t_demo
*
* @author Ant丶
* @mbg.generated
*/
public class Demo implements Serializable {
/**
* Description:
* ID
*
* Column:
* t_demo.id
*
* @mbg.generated
*/
private Long id;

/**
* Description:
* 邮箱
*
* Column:
* t_demo.email
*
* @mbg.generated
*/
private String email;

/**
*
* Column:
* t_demo.phone
*
* @mbg.generated
*/
private String phone;

/**
*
* Column:
* t_demo.createTime
*
* @mbg.generated
*/
private Date createtime;

/**
*
* Column:
* t_demo.updateTime
*
* @mbg.generated
*/
private Date updatetime;
....
}

mapper.java

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
public interface DemoMapper {
/**
* Description: 使用Example统计总数
*
* @param example example
* @return countByExample 的结果.
* @mbg.generated
*/
long countByExample(DemoExample example);

/**
* Description: 根据Example删除
*
* @param example example
* @return deleteByExample 的结果.
* @mbg.generated
*/
int deleteByExample(DemoExample example);

/**
* Description: 根据主键删除
*
* @param id id
* @return deleteByPrimaryKey 的结果.
* @mbg.generated
*/
int deleteByPrimaryKey(Long id);

/**
* Description: 插入一条记录
*
* @param record record
* @return insert 的结果.
* @mbg.generated
*/
int insert(Demo record);

/**
* Description: 插入一条记录, 实现选择入库
*
* @param record record
* @return insertSelective 的结果.
* @mbg.generated
*/
int insertSelective(Demo record);

/**
* Description: 根据Example查询返回数据
*
* @param example example
* @return selectByExample 的结果.
* @mbg.generated
*/
List<Demo> selectByExample(DemoExample example);

/**
* Description: 查询结果选择性返回
*
* @param example example
* @param selective selective
* @return selectByExampleSelective 的结果.
* @mbg.generated
*/
List<Demo> selectByExampleSelective(@Param("example") DemoExample example, @Param("selective") Demo.Column ... selective);

/**
* Description: 根据主键查询返回数据
*
* @param id id
* @return selectByPrimaryKey 的结果.
* @mbg.generated
*/
Demo selectByPrimaryKey(Long id);

/**
* Description: 通过主键查询的结果选择性返回
*
* @param id id
* @param selective selective
* @return selectByPrimaryKeySelective 的结果.
* @mbg.generated
*/
Demo selectByPrimaryKeySelective(@Param("id") Long id, @Param("selective") Demo.Column ... selective);

/**
* Description: Selective选择插入更新增强功能
*
* @param record record
* @param example example
* @return updateByExampleSelective 的结果.
* @mbg.generated
*/
int updateByExampleSelective(@Param("record") Demo record, @Param("example") DemoExample example);

/**
* Description: 根据Example更新数据
*
* @param record record
* @param example example
* @return updateByExample 的结果.
* @mbg.generated
*/
int updateByExample(@Param("record") Demo record, @Param("example") DemoExample example);

/**
* Description: 根据主键更新数据, 可选择
*
* @param record record
* @return updateByPrimaryKeySelective 的结果.
* @mbg.generated
*/
int updateByPrimaryKeySelective(Demo record);

/**
* Description: 根据主键更新数据
*
* @param record record
* @return updateByPrimaryKey 的结果.
* @mbg.generated
*/
int updateByPrimaryKey(Demo record);

/**
* Description: 查询单条数据
*
* @param example example
* @return selectOneByExample 的结果.
* @mbg.generated
*/
Demo selectOneByExample(DemoExample example);

/**
* Description: 查询单条数据字段选择性返回
*
* @param example example
* @param selective selective
* @return selectOneByExampleSelective 的结果.
* @mbg.generated
*/
Demo selectOneByExampleSelective(@Param("example") DemoExample example, @Param("selective") Demo.Column ... selective);

/**
* Description: 批量插入
*
* @param list list
* @return batchInsert 的结果.
* @mbg.generated
*/
int batchInsert(@Param("list") List<Demo> list);

/**
* Description: 可选择字段批量插入
*
* @param list list
* @param selective selective
* @return batchInsertSelective 的结果.
* @mbg.generated
*/
int batchInsertSelective(@Param("list") List<Demo> list, @Param("selective") Demo.Column ... selective);

/**
* Description: 存在即更新(saveOrUpdate)
*
* @param record record
* @return upsert 的结果.
* @mbg.generated
*/
int upsert(Demo record);

/**
* Description: 存在即更新, 可选字段(saveOrUpdate)
*
* @param record record
* @return upsertSelective 的结果.
* @mbg.generated
*/
int upsertSelective(Demo record);
}

使用

Demo链式调用

1
2
3
4
Demo demo = new Demo.Builder()
.email("243689185@qq.com")
.phone("13800138000")
.build();

Example使用

1
2
3
4
DemoExample example = new DemoExample()
.createCriteria()
.andIdEqualTo(1l)
.example();

以上