Skip to content

Commit 377bb32

Browse files
committed
完善文档
1 parent ddcbfff commit 377bb32

File tree

5 files changed

+128
-122
lines changed

5 files changed

+128
-122
lines changed

src/main/java/tk/mybatis/mapper/annotation/KeyProperty.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/main/java/tk/mybatis/mapper/entity/EntityColumn.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public class EntityColumn {
1414
private boolean id = false;
1515
private boolean uuid = false;
1616
private boolean identity = false;
17-
private boolean key = false;
1817
private String generator;
1918
private String orderBy;
2019

@@ -105,14 +104,6 @@ public void setOrderBy(String orderBy) {
105104
this.orderBy = orderBy;
106105
}
107106

108-
public boolean isKey() {
109-
return key;
110-
}
111-
112-
public void setKey(boolean key) {
113-
this.key = key;
114-
}
115-
116107
@Override
117108
public boolean equals(Object o) {
118109
if (this == o) return true;

src/main/java/tk/mybatis/mapper/mapperhelper/EntityHelper.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
package tk.mybatis.mapper.mapperhelper;
2626

27-
import tk.mybatis.mapper.annotation.KeyProperty;
2827
import tk.mybatis.mapper.annotation.NameStyle;
2928
import tk.mybatis.mapper.code.IdentityDialect;
3029
import tk.mybatis.mapper.code.Style;
@@ -235,10 +234,6 @@ public static synchronized void initEntityNameMap(Class<?> entityClass, Style st
235234
entityColumn.setOrderBy(orderBy.value());
236235
}
237236
}
238-
//KeyProperty
239-
if (field.isAnnotationPresent(KeyProperty.class)) {
240-
entityColumn.setKey(true);
241-
}
242237
//主键策略 - Oracle序列,MySql自动增长,UUID
243238
if (field.isAnnotationPresent(SequenceGenerator.class)) {
244239
SequenceGenerator sequenceGenerator = field.getAnnotation(SequenceGenerator.class);

wiki/mapper3/2.Integration.md

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,21 @@ http://repo1.maven.org/maven2/tk/mybatis/mapper
2323

2424
http://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/
2525

26-
##集成通用Mapper - 3.2.0版本以后配置更简单,以前的拦截器不能继续使用
26+
##集成通用Mapper
27+
28+
3.2.0版本以后配置更简单,以前的拦截器不能继续使用。
2729

2830
配置方式分为Java编码方式和spring集成方式。
2931

30-
###1). Mybatis配置文件方式
32+
###1). Java编码方式
3133

3234
```java
3335
MapperHelper mapperHelper = new MapperHelper();
34-
// 各项配置都能通过setter进行配置
35-
// 注册通用Mapper接口 - 可以自动注册继承的接口
36+
//特殊配置
37+
Config config = new Config();
38+
//具体支持的参数看后面的文档
39+
config.setXXX(XXX);
40+
// 注册自己项目中使用的通用Mapper接口,这里没有默认值,必须手动注册
3641
mapperHelper.registerMapper(Mapper.class);
3742
//配置完成后,执行下面的操作
3843
mapperHelper.processConfiguration(session.getConfiguration());
@@ -61,21 +66,12 @@ mapperHelper.processConfiguration(session.getConfiguration());
6166
</bean>
6267
```
6368

69+
关于MyBatis-Spring详细配置的可以查看[MyBatis-Spring配置简单了解](http://blog.csdn.net/isea533/article/details/45640319)
70+
71+
<br><br><br><br><br><br><br>
72+
##可配参数介绍
73+
6474

65-
###INENTITY参数配置(仅对 insert 有用)
66-
67-
对于不同的数据库,需要配置不同的参数,这些参数如下:
68-
69-
- <b>DB2</b>: `VALUES IDENTITY_VAL_LOCAL()`
70-
- <b>MYSQL</b>: `SELECT LAST_INSERT_ID()`
71-
- <b>SQLSERVER</b>: `SELECT SCOPE_IDENTITY()`
72-
- <b>CLOUDSCAPE</b>: `VALUES IDENTITY_VAL_LOCAL()`
73-
- <b>DERBY</b>: `VALUES IDENTITY_VAL_LOCAL()`
74-
- <b>HSQLDB</b>: `CALL IDENTITY()`
75-
- <b>SYBASE</b>: `SELECT @@IDENTITY`
76-
- <b>DB2_MF</b>: `SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1`
77-
- <b>INFORMIX</b>: `select dbinfo('sqlca.sqlerrd1') from systables where tabid=1`
78-
- <b>JDBC</b>:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段)。
7975

8076
#[如何使用通用Mapper](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md)
8177

wiki/mapper3/3.Use.md

Lines changed: 114 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public interface UserInfoMapper extends Mapper<UserInfo> {
1717

1818
一旦继承了`Mapper<T>`,继承的`Mapper`就拥有了`Mapper<T>`所有的通用方法。
1919

20+
<br><br><br><br>
2021
##2. 泛型(实体类)`<T>`的类型必须符合要求
2122

2223
实体类按照如下规则和数据库表进行转换,注解全部是JPA中的注解:
@@ -31,105 +32,135 @@ public interface UserInfoMapper extends Mapper<UserInfo> {
3132

3233
5. 使用`@Transient`注解可以忽略字段,添加该注解的字段不会作为表字段使用.
3334

34-
6. 建议一定是有一个`@Id`注解作为主键的字段,可以有多个`@Id`注解的字段作为联合主键.
35+
6. <b>建议一定是有一个`@Id`注解作为主键的字段,可以有多个`@Id`注解的字段作为联合主键.</b>
3536

36-
7. 默认情况下,实体类中如果不存在包含`@Id`注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低).
37+
7. <b>默认情况下,实体类中如果不存在包含`@Id`注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低).</b>
3738

3839
8. 实体类可以继承使用,可以参考测试代码中的`tk.mybatis.mapper.model.UserLogin2`类.
3940

4041
9. 由于基本类型,如int作为实体类字段时会有默认值0,而且无法消除,所以实体类中建议不要使用基本类型.
4142

42-
除了上面提到的这些,Mapper还提供了序列(支持Oracle)、UUID(任意数据库,字段长度32)、主键自增(类似Mysql,Hsqldb)三种方式,其中序列和UUID可以配置多个,主键自增只能配置一个。
43+
10. `@NameStyle`注解,用来配置对象名/字段和表名/字段之间的转换方式,该注解优先于全局配置`style`,可选值:
44+
- `normal`:使用实体类名/属性名作为表名/字段名
45+
- `camelhump`:<b>这是默认值</b>,驼峰转换为下划线形式
46+
- `uppercase`:转换为大写
47+
- `lowercase`:转换为小写
4348

44-
这三种方式不能同时使用,同时存在时按照 `序列>UUID>主键自增`的优先级进行选择.下面是具体配置方法:
49+
通过[使用Mapper专用的MyBatis生成器插件](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/7.UseMBG.md)可以直接生成符合要求带注解的实体类。
50+
51+
<br><br><br><br>
52+
53+
<br><br><br><br>
54+
##3.主键策略(仅用于insert方法) - 将会在3.3.0版本移除,使用新的简单的注解
55+
56+
通用Mapper还提供了序列(支持Oracle)、UUID(任意数据库,字段长度32)、主键自增(类似Mysql,Hsqldb)三种方式,其中序列和UUID可以配置多个,主键自增只能配置一个。
57+
58+
由于MySql自增主键最常用,所以这里从最简单的配置方式开始。
59+
60+
###1.`@GeneratedValue(generator = "JDBC")`
4561

46-
1. 使用序列可以添加如下的注解:
4762
```java
48-
//可以用于数字类型,字符串类型(需数据库支持自动转型)的字段
49-
@SequenceGenerator(name="Any",sequenceName="seq_userid")
5063
@Id
64+
@GeneratedValue(generator = "JDBC")
5165
private Integer id;
5266
```
53-
该字段不会回写。这种情况对应类似如下的XML:
54-
```xml
55-
<insert id="insertAuthor">
56-
insert into Author
57-
(id, username, password, email,bio, favourite_section)
58-
values
59-
(seq_userid.nextval, #{username, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
60-
</insert>
61-
```
62-
63-
2. 使用UUID时:
64-
```java
65-
//可以用于任意字符串类型长度超过32位的字段
66-
@GeneratedValue(generator = "UUID")
67-
private String username;
67+
68+
这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段)。
69+
这种情况对应的xml类似下面这样:
70+
```xml
71+
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
72+
insert into Author (username,password,email,bio)
73+
values (#{username},#{password},#{email},#{bio})
74+
</insert>
6875
```
69-
该字段不会回写。这种情况对应类似如下的XML:
70-
```xml
71-
<insert id="insertAuthor">
72-
<bind name="username_bind" value='@java.util.UUID@randomUUID().toString().replace("-", "")' />
73-
insert into Author
74-
(id, username, password, email,bio, favourite_section)
75-
values
76-
(#{id}, #{username_bind}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
77-
</insert>
78-
```
79-
80-
3. 使用主键自增:
76+
77+
###2.`@GeneratedValue(strategy = GenerationType.IDENTITY)`
78+
79+
这个注解适用于主键自增的情况,支持下面这些数据库:
80+
81+
- <b>DB2</b>: `VALUES IDENTITY_VAL_LOCAL()`
82+
- <b>MYSQL</b>: `SELECT LAST_INSERT_ID()`
83+
- <b>SQLSERVER</b>: `SELECT SCOPE_IDENTITY()`
84+
- <b>CLOUDSCAPE</b>: `VALUES IDENTITY_VAL_LOCAL()`
85+
- <b>DERBY</b>: `VALUES IDENTITY_VAL_LOCAL()`
86+
- <b>HSQLDB</b>: `CALL IDENTITY()`
87+
- <b>SYBASE</b>: `SELECT @@IDENTITY`
88+
- <b>DB2_MF</b>: `SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1`
89+
- <b>INFORMIX</b>: `select dbinfo('sqlca.sqlerrd1') from systables where tabid=1`
90+
- <b>JDBC</b>:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段)。
91+
92+
使用`GenerationType.IDENTITY`需要在全局配置中配置`IDENTITY`的参数值,并且需要根据数库配置`ORDER`属性。
93+
94+
举例如下:
95+
8196
```java
8297
//不限于@Id注解的字段,但是一个实体类中只能存在一个(继承关系中也只能存在一个)
8398
@Id
8499
@GeneratedValue(strategy = GenerationType.IDENTITY)
85100
private Integer id;
86-
```
87-
增加这个注解后,__会回写ID__
88-
89-
通过设置`@GeneratedValue``generator`参数可以支持更多的获取主键的方法,例如在Oracle中使用序列:
90-
```java
91-
@Id
92-
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select SEQ_ID.nextval from dual")
93-
private Integer id;
94-
```
95-
使用Oracle序列的时候,还需要配置:
96-
```xml
97-
<property name="ORDER" value="BEFORE"/>
98-
```
99-
因为在插入数据库前,需要先获取到序列值,否则会报错。
100-
这种情况对于的xml类似下面这样:
101-
```xml
102-
<insert id="insertAuthor">
103-
<selectKey keyProperty="id" resultType="int" order="BEFORE">
104-
select SEQ_ID.nextval from dual
101+
```
102+
103+
对应的XML形式为:
104+
105+
```xml
106+
<insert id="insertAuthor">
107+
<selectKey keyProperty="id" resultType="int" order="AFTER">
108+
SELECT LAST_INSERT_ID()
105109
</selectKey>
106110
insert into Author
107111
(id, username, password, email,bio, favourite_section)
108112
values
109113
(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
110-
</insert>
111-
```
114+
</insert>
115+
```
116+
117+
注意`<selectKey>`中的内容就是`IDENTITY`参数值对应数据库的SQL
112118

113-
4. 主键自增还有一种简单的写法:
119+
###3.`@GeneratedValue(generator = "UUID")`
114120
```java
115-
//不限于@Id注解的字段,但是一个实体类中只能存在一个(继承关系中也只能存在一个)
116-
@GeneratedValue(generator = "JDBC")
117-
private Integer id;
121+
//可以用于任意字符串类型长度超过32位的字段
122+
@GeneratedValue(generator = "UUID")
123+
private String username;
124+
```
125+
该字段不会回写。这种情况对应类似如下的XML:
126+
```xml
127+
<insert id="insertAuthor">
128+
<bind name="username_bind" value='@java.util.UUID@randomUUID().toString().replace("-", "")' />
129+
insert into Author
130+
(id, username, password, email,bio, favourite_section)
131+
values
132+
(#{id}, #{username_bind}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
133+
</insert>
118134
```
119-
这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段)。
120-
这种情况对应的xml类似下面这样:
121-
```xml
122-
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
123-
insert into Author (username,password,email,bio)
124-
values (#{username},#{password},#{email},#{bio})
125-
</insert>
126-
```
127135

136+
###4.Oracle使用序列
137+
```java
138+
@Id
139+
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select SEQ_ID.nextval from dual")
140+
private Integer id;
141+
```
142+
使用Oracle序列的时候,还需要配置:
143+
```xml
144+
<property name="ORDER" value="BEFORE"/>
145+
```
146+
因为在插入数据库前,需要先获取到序列值,否则会报错。
147+
这种情况对于的xml类似下面这样:
148+
```xml
149+
<insert id="insertAuthor">
150+
<selectKey keyProperty="id" resultType="int" order="BEFORE">
151+
select SEQ_ID.nextval from dual
152+
</selectKey>
153+
insert into Author
154+
(id, username, password, email,bio, favourite_section)
155+
values
156+
(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
157+
</insert>
158+
```
128159

129160

130-
##3. 将继承的Mapper接口添加到Mybatis配置中
161+
##4. 将继承的Mapper接口添加到Mybatis配置中
131162

132-
例如本项目测试中的配置:
163+
###非Spring项目中在mybatis配置文件中配置,如:
133164
```xml
134165
<mappers>
135166
<mapper class="tk.mybatis.mapper.mapper.CountryMapper" />
@@ -138,18 +169,27 @@ private Integer id;
138169
</mappers>
139170
```
140171

141-
<b>附:Spring配置相关</b>
172+
###Spring配置方式
142173

143174
如果你在Spring中配置Mapper接口,不需要像上面这样一个个配置,只需要有下面的这个扫描Mapper接口的这个配置即可:
144175
```xml
145-
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
176+
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
146177
<property name="basePackage" value="com.isea533.mybatis.mapper"/>
147178
</bean>
148-
```
179+
```
180+
181+
另外因为通用接口都有顶层的接口,所以你还可以用下面的方式进行配置:
182+
```xml
183+
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
184+
<property name="basePackage" value="com.**.mapper"/>
185+
<property name="markerInterface" value="tk.mybatis.mapper.common.Mapper"/>
186+
</bean>
187+
```
188+
这样配置后,直接继承了`Mapper`接口的才会被扫描,`basePackage`可以配置的范围更大。
149189

150190
如果想在Spring4中使用泛型注入,还需要包含`Mapper<T>`所在的包,具体请看 [在Spring4中使用通用Mapper](http://git.oschina.net/free/Mapper/blob/master/wiki/UseMapperInSpring4.md)
151191

152-
##4. 代码中使用
192+
##5. 代码中使用
153193

154194
例如下面这个简单的例子:
155195
```java
@@ -200,7 +240,7 @@ try {
200240

201241
直接在需要的地方注入Mapper继承的接口即可,和一般情况下的使用没有区别.
202242

203-
##5.其他
243+
##6.其他
204244

205245
如果你的实体是继承Map的,你可能需要将数据库查询的结果从大写下划线形式转换为驼峰形式,你可以搭配下面的拦截器使用:
206246

0 commit comments

Comments
 (0)