1
- #MyBatis通用Mapper3
1
+ # MyBatis通用Mapper3
2
2
3
- ##极其方便的使用MyBatis单表的增删改查
4
-
5
- ##支持单表操作,不支持通用的多表联合查询
3
+ 通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。
6
4
7
- ##优点?
5
+ 极其方便的使用MyBatis单表的增删改查。
8
6
9
- 通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法 。
7
+ 支持单表操作,不支持通用的多表联合查询 。
10
8
11
- ##MyBatis工具网站: [ http://mybatis.tk ] ( http://www.mybatis.tk )
9
+ ## 通用 Mapper 支持 Mybatis-3.2.4 及以上版本
12
10
13
- ##特别强调:不是表中字段的属性必须加` @Transient ` 注解
11
+ ## 特别强调:不是表中字段的属性必须加 ` @Transient ` 注解
14
12
15
- ##项目文档
13
+ ## 项目文档
16
14
17
- ###在你打算使用通用Mapper前 ,一定要看看下面的文档,许多人在初次使用时遇到的问题,99%都在文档中有说明!!
15
+ 在你打算使用通用 Mapper 前 ,一定要看看下面的文档,许多人在初次使用时遇到的问题,99% 都在文档中有说明!!
18
16
19
17
1 . [ 如何集成通用Mapper] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/2.Integration.md )
20
-
21
18
2 . [ 如何使用通用Mapper] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md )
22
-
23
19
2 . [ 3.3.0版本新增功能用法文档] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.2.Use330.md )
24
-
25
20
3 . [ 根据需要自定义接口] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/4.Professional.md )
26
-
27
21
4 . [ Mapper3通用接口大全] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/5.Mappers.md )
28
-
29
22
5 . [ 扩展通用接口] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/6.MyMapper.md )
30
-
31
23
6 . [ 使用Mapper专用的MyBatis生成器插件] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/7.UseMBG.md )
32
-
33
24
7 . [ 在Spring4中使用通用Mapper] ( http://git.oschina.net/free/Mapper2/blob/master/wiki/mapper/4.Spring4.md )
34
-
35
25
8 . [ Mapper3常见问题和用法] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/9.QA.md )
36
26
37
- ###如何让作者为你开发通用方法?
27
+ ### 如何让作者为你开发通用方法?
38
28
39
29
实际上,只要你看看上面的第 6 个文档,你完全可以自己开发出来。
40
30
44
34
45
35
你还可以通过开源中国众包购买服务[ 开发 MyBatis 通用 Mapper 通用方法] ( https://zb.oschina.net/market/opus/92cda9e3bc85365f )
46
36
47
- ##通用Mapper - 简单用法示例
37
+ ## 通用 Mapper - 简单用法示例
48
38
49
39
全部针对单表操作,每个实体类都需要继承通用Mapper接口来获得通用方法。
50
40
@@ -75,7 +65,7 @@ CountryMapper代码如下:
75
65
76
66
这里不说更具体的内容,如果您有兴趣,可以查看下面的<b >项目文档</b >
77
67
78
- ##实体类注解
68
+ ## 实体类注解
79
69
80
70
从上面效果来看也能感觉出这是一种类似hibernate的用法,因此也需要实体和表对应起来,因此使用了JPA注解。更详细的内容可以看下面的<b >项目文档</b >。
81
71
@@ -92,21 +82,26 @@ Country代码:
92
82
93
83
[ 使用Mapper专用的MyBatis Generator插件] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/7.UseMBG.md ) 可以方便的生成这些(带注解的)实体类。
94
84
95
- ##通用Mapper支持Mybatis-3.2.4及以上版本
96
-
97
- ##使用Maven
98
-
99
- ###重要提示,3.1.0及以后版本的groupId修改为tk.mybatis,artifactId为mapper
100
-
85
+ ## 使用 Maven
101
86
``` xml
102
87
<dependency >
103
88
<groupId >tk.mybatis</groupId >
104
89
<artifactId >mapper</artifactId >
105
90
<version >3.3.9</version >
106
91
</dependency >
107
92
```
93
+ 如果你使用 Spring Boot 可以直接引入:
94
+ ``` xml
95
+ <!-- mapper-->
96
+ <dependency >
97
+ <groupId >tk.mybatis</groupId >
98
+ <artifactId >mapper-spring-boot-starter</artifactId >
99
+ <version >1.0.0</version >
100
+ </dependency >
101
+ ```
102
+ 具体用法可以参考:[ MyBatis-Spring-Boot] ( https://github.com/abel533/MyBatis-Spring-Boot )
108
103
109
- ##引入Jar包 ,下载地址:
104
+ ## 引入 Jar 包 ,下载地址:
110
105
111
106
https://oss.sonatype.org/content/repositories/releases/tk/mybatis/mapper
112
107
@@ -116,182 +111,12 @@ http://repo1.maven.org/maven2/tk/mybatis/mapper
116
111
117
112
http://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/
118
113
119
- ##[ 更新日志] ( http://git.oschina.net/free/Mapper/blob/master/wiki/Changelog.md )
120
-
121
- ##最新版本3.3.9 - 2016-09-04
122
-
123
- * 增加` selectByIds ` 和` deleteByIds ` ,用法见通用Mapper接口大全
124
- * MBG插件支持` beginningDelimiter ` 和` endingDelimiter `
125
- * MBG插件增加schema配置(catalog也可以用这个),会自动在表的注解名字前面加上` schema.tablename `
126
- * MBG插件支持oracle获取注释,其他数据库可以尝试#114
127
- * 根据** 李领北** 建议修改` Example ` 中的` propertyMap ` #159
128
- * [ MyBatis Generator 1.3.4 扩展,可以设置 Mapper(Dao)后缀] ( http://blog.csdn.net/isea533/article/details/52430691 )
129
- * 增加对MBG1.3.4的支持
130
- * ` Example ` 中的` andIn ` 和` andNotIn ` 中的参数` Collection ` 改为` Iterable `
131
- * 解决驼峰转下划线的错误,感谢 ptma, piggsoft 和 liufor 的PR
132
-
133
- ###3 .3.8 - 2016-03-23
134
-
135
- * ` Example ` 的` andIn ` 和` andNotIn ` 方法参数改为` Collection ` #109
136
- * 解决ResultMapping.Builder3.2.6版本新增` lazy ` 方法导致无法兼容3.2.4~ 3.2.5版本的问题,仍然兼容3.2.4+
137
- * 解决github[ #12 ] ( https://github.com/abel533/Mapper/issues/12 ) 问题
138
- * 解决#107
139
- * 解决和分页插件PageHelper中orderBy默认属性名相同导致排序的错误
140
-
141
- ###3 .3.7 - 2016-03-12
142
-
143
- * ` Example ` 增加` orderBy ` 方法,使用属性进行排序,例如:` example.orderBy("id").desc().orderBy("countryname").orderBy("countrycode").asc(); `
144
- * 当实体类包含数组类型的字段时,在` resultMap ` 中不使用` javaType ` ,这种情况如果出错,可以通过` @ColumnType ` 注解设置` jdbcType ` #103
145
- * 实体类中忽略` transient ` 类型的字段#106
146
-
147
- ###3 .3.6 - 2016-02-20
148
-
149
- * 增加对mybatis-spring 1.2.4版本的支持,兼容之前的版本
150
-
151
- ###3 .3.5 - 2016-02-16
152
-
153
- * ` Example ` 增加对动态表名支持,通过` setTableName ` 设置表名
154
- * 在example相关的两个` update ` 方法中,参数为实体类和` Example ` ,这个方法只能通过` Example ` 来设置动态表名,不支持通过实体设置动态表名
155
- * 优化两个` select count ` 查询,当表只有一个主键的时候,使用` select count(pk) ` ,其他时候使用` select count(*) `
156
-
157
- ###3 .3.4 - 2016-01-05
158
-
159
- * 解决insertList的bug#86
160
- * ` Example ` 构造方法增加` notNull ` 参数,默认` false ` ,允许值为` null ` ,值为` null ` 的时候不加入到条件中。
161
- * ` seqFormat ` 格式化参数增加第四个可配置值` TableName ` ,该属性的具体含义请参考[ 如何集成通用Mapper] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/2.Integration.md ) 中的参数介绍
162
-
163
- ###3 .3.3 - 2015-12-30
164
-
165
- - 解决OGNL中的and,or大写导致的错误
166
- - 解决SpecialProvider不支持insertable的bug#77
167
- - 解决JDK6,7无法获取字段泛型类型的问题。
168
- - 提供一个Spring Boot集成的示例: https://github.com/abel533/MyBatis-Spring-Boot
169
-
170
- ###3 .3.2 - 2015-12-12
171
-
172
- - 解决数据越界bug#73
173
- - 解决and少空格问题
174
- - 解决order by错误#74
175
- - ` tk.mybatis.spring.mapper.MapperScannerConfigurer ` 中的属性` mapperHelper ` 增加setter和getter方法,方便通过代码进行配置
176
-
177
- ###3 .3.1 - 2015-12-09
178
-
179
- - 增加` enableMethodAnnotation ` 参数,可以控制是否支持方法上的JPA注解,默认` false ` 。
180
- 设置` enableMethodAnnotation = true ` 的时候注意,如` getRealName ` 或` setYourName ` 都会产生` realName ` 属性或` yourName ` 属性,如果该方法对应的属性不是表中的字段,就需要给方法增加` @Transient ` 注解。
181
- 同样如果你的实体是继承` Map ` 类型的,你不需要在实体中写` private String userName ` 这样的属性,你只需要写` setUserName ` 或` getUserName ` 这样的方法就可以。
182
- - 在处理的注解的时候,优先从` Field ` 获取,然后是` setter ` 方法,最后是` getter ` 方法,注解重复的情况下,只获取按顺序得到的第一个
183
- - 为了支持如` public class Country extends Entity<Integer, String> ` 这样的泛型类型,在生成` #{propertyName} ` 的时候都带上了` javaType ` 属性。
184
- 产生的结果就是` #{propertyName, javaType=java.lang.Integer} ` 这样子的,这会导致当你调用方法时,必须保证类型一致。
185
- 也就是假设主键是` Integer id ` ,调用` selectByPrimaryKey(Object id) ` 的时候,参数` id ` 必须使用` 100 ` 这样的数字,不能使用` "100" ` 字符串(以前版本可以)。
186
- 如果不带` javaType ` ,那么如果` id ` 是个泛型,MyBatis查找的时候就会因为找不到正确的类型而抛出异常。
187
- - 为了让扩展更方便,将` tk.mybatis.mapper.provider ` 包下所有的通用接口的实现方法改为了` String ` 形式。
188
- 自己扩展单表操作的方法是非常容易的事情,建议有一定通用Mapper使用基础的自行扩展,扩展可以参考[ 如何扩展通用接口] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/6.MyMapper.md )
189
- - 新增` SqlHelper ` 工具类,其中包含了大量可用的现成的SQL方法
190
- - ` @Column ` 注解增加对` insertable ` 和` updatable ` 属性的支持
191
-
192
- ###3 .3.0 - 2015-11-01
193
-
194
- - 增加对动态表名的支持,需要实体类继承` IDynamicTableName ` 接口,用法见[ 详细说明] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.2.Use330.md )
195
-
196
- - ` Example ` 增加自定义查询条件,提供了4个方法,具体方法和用法见[ 详细说明] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.2.Use330.md )
197
-
198
- - 新增` @ColumnType ` 注解,可以单独设置列的` jdbcType ` 和` typeHandler `
199
-
200
- - ` Example ` 的` in ` 和` not in ` 中的` List<Object> ` 参数改为` List<?> ` ,允许任意类型
201
-
202
- - select查询方法返回类型不在使用` resultType ` ,改为` resultMap ` ,因此可以支持` typeHandler ` 的读取
203
-
204
- - ` Style ` 自动转方式新增` camelhumpAndUppercase ` 驼峰转下划线大写形式,` camelhumpAndLowercase ` 驼峰转下划线小写形式
205
-
206
- - MapperTemplate中的` getSelectReturnType ` 方法改为` getEntityClass ` ,` getBEFORE ` 改为` isBEFORE `
207
-
208
- - 文档中增加` @GeneratedValue(strategy = GenerationType.IDENTITY) ` 的一种重要[ 用法说明] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.2.Use330.md )
209
-
210
- - 修复selectAll不支持` @OrderBy ` 注解的bug
211
-
212
- - 解决一个驼峰转换bug,例如` helloWorld ` 会转换为` hello_world ` (原先是` hello_World ` )
213
-
214
-
215
- ###3 .2.2 - 2015-09-19
216
-
217
- * 和Spring集成时,允许通过` markerInterface ` 属性配置通用接口(注意该属性的原有作用不变),想要让该接口自动注册,该接口就需要继承` tk.mybatis.mapper.common.Marker ` 接口,` Mapper<T> ` 默认继承该接口,所以如果自己的接口是继承` Mapper<T> ` 的,不需要再继承。
218
- * 解决注册默认接口时存在的bug
219
-
220
- ###3 .2.1 - 2015-09-02
221
-
222
- * 解决spring集成中可能出现definition.getBeanClassName()空指针异常bug[ #49 ] ( http://git.oschina.net/free/Mapper/issues/49 )
223
- * 关于3.2.x版本,请仔细看3.2.0的更新日志,最新版本的文档也是针对3.2.x版本的
224
-
225
- ###3 .2.0 - 2015-09-01
226
-
227
- * 移除` MapperInterceptor ` 拦截器,以后不能在通过拦截器配置
228
- * 增加mybatis-spring特殊支持,主要是根据mybatis-spring项目增加了下面两个类:
229
- - ` tk.mybatis.spring.mapper.MapperScannerConfigurer `
230
- - ` tk.mybatis.spring.mapper.MapperFactoryBean `
231
- * 这两个类和MyBatis提供的区别是增加了MapperHelper属性,通过在` MapperScannerConfigurer ` 中使用` properties ` 属性注入配置
232
- * 这两个类,在全名上和MyBatis的区别是` org.mybatis.xxx ` 改为了` tk.mybatis.xxx ` ,名字相近,更方便修改配置
233
- * 和Spring集成方法:
234
-
235
- ``` xml
236
- <bean class =" tk.mybatis.spring.mapper.MapperScannerConfigurer" >
237
- <property name =" basePackage" value =" com.isea533.mybatis.mapper" />
238
- <property name =" properties" >
239
- <value >
240
- mappers=tk.mybatis.mapper.common.Mapper
241
- </value >
242
- </property >
243
- </bean >
244
- ```
245
-
246
- * 这种配置方式是不是简单的不能再简单了?
247
- * 增加` style ` 属性配置,用来配置对象名/字段和表名/字段之间的转换方式,可选值:
248
- - ` normal ` :使用实体类名/属性名作为表名/字段名
249
- - ` camelhump ` :<b >这是默认值</b >,驼峰转换为下划线形式
250
- - ` uppercase ` :转换为大写
251
- - ` lowercase ` :转换为小写
252
- * 增加实体注解` @NameStyle ` ,该注解优先于全局配置` style `
253
- * 解决` example.selectProperties ` 映射错误的bug[ #48 ] ( http://git.oschina.net/free/Mapper/issues/48 )
254
-
255
-
256
- ###3 .1.3 - 2015-08-25
257
-
258
- * 去掉了3.1.3-SNAPSHOT版本中的` MapperOnceInterceptor ` 拦截器,下个版本会完善` MapperHelper ` 的配置方式
259
- * ` Example ` 增加了` example.selectProperties("id", "countryname", ...) ` 方法,可以指定查询列,注意这里参数写的是属性名,` Example ` 会自动映射到列名
260
- * ` Example ` 增加` andEqualTo(实体对象) ` 方法,可以将一个实体放进去,会自动根据属性和值拼出column=value的条件 <b >Bob - 0haizhu0@gmail.com 提供</b >
261
- * MyBatis在处理` <cache/> ` 和` @CacheNamespace ` 的时候不统一,只有一个能生效,这导致xml中配置二级缓存对通用Mapper注解形式的方法无效,该问题已解决
262
- * 二级缓存配置方法,如果接口有对应的xml,在xml中配置二级缓存。如果只有接口没有xml,用注解配置二级缓存即可
263
- * 需要注意的是,二级缓存在xml配置时,只对通用Mapper方法有效,自己用` @Select ` 等注解定义的这种仍然无效,这种情况只能在xml中定义
264
-
265
- ###3 .1.2 - 2015-07-14
266
-
267
- * 解决别名时的一种特殊情况,例如` @Column(name=" ` desc` ") ` 的时候,就不需要自动添加别名
268
- * 反射获取所有列名的时候,不在自动转换为大写形式,对数据库区分大小写的情况有用
269
-
270
- ###3 .1.1 - 2015-07-01
271
-
272
- * 解决` ConditionMapper ` 中` selectByCondition ` 和` updateByCondition ` 方法错误
273
-
274
- ###3 .1.0 - 2015-06-10
275
-
276
- * 基础包名从` com.github.abel533 ` 改为` tk.mybatis.mapper `
277
- * Maven的groupId改为` tk.mybatis ` ,artifactId为` mapper `
278
- * 增加和Example功能类似的Condition查询,仅仅名字不同
279
- * 更多详细变化请看[ Mapper3通用接口大全] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/5.Mappers.md )
280
- * 关于3.0.x版本请看[ Mapper3.0.x] ( http://git.oschina.net/free/Mapper/tree/Mapper3.0.x/ )
281
-
282
- ###3 .0.0 - 2015-06-04
283
-
284
- * 将` EntityMapper ` 和` SqlMapper ` 移出,现在是独立项目[ EntityMapper] ( http://git.oschina.net/free/EntityMapper )
285
- * 将` Mapper<T> ` 全部接口方法拆分为独立接口,方便选择集成
286
- * 增加` MySqlMapper<T> ` 包含批量插入和单个插入,批量插入可以回写全部id
287
- * 增加` RowBoundsMapper<T> ` 包含两个分页查询,可以配合[ PageHelper] ( http://git.oschina.net/free/Mybatis_PageHelper ) 实现物理分页
288
- * 详细变化请看[ Mapper3变化] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/1.Changes.md )
289
- * Mapper2资深用户请看[ Mapper3高级应用] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/4.Professional.md )
290
- * [ Mapper3通用接口大全] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/5.Mappers.md )
291
- * [ 快速开发自己的通用接口] ( http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/6.MyMapper.md )
114
+ ## [ 更新日志] ( http://git.oschina.net/free/Mapper/blob/master/wiki/Changelog.md )
292
115
293
116
##作者信息
294
117
118
+ MyBatis 工具网站:[ http://mybatis.tk ] ( http://www.mybatis.tk )
119
+
295
120
作者博客:http://blog.csdn.net/isea533
296
121
297
122
作者邮箱: abel533@gmail.com
0 commit comments