Skip to content

Commit

Permalink
增加文档中标题缺少的空格。
Browse files Browse the repository at this point in the history
  • Loading branch information
abel533 committed Jul 9, 2017
1 parent e8164a4 commit dc2213f
Show file tree
Hide file tree
Showing 11 changed files with 99 additions and 99 deletions.
18 changes: 9 additions & 9 deletions wiki/mapper3/1.Changes.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#通用Mapper3变化
# 通用Mapper3变化

##精简项目,拆分为二
## 精简项目,拆分为二

本项目2.x版本包含了通用`Mapper<T>``EntityMapper`(以及`SqlMapper`)。

Expand All @@ -10,7 +10,7 @@

`EntityMapper`项目地址:http://git.oschina.net/free/EntityMapper

##细化接口,拆分为一
## 细化接口,拆分为一

`Mapper<T>`包含了很多通用的方法,但并不是所有人都需要这些方法,也许其中的某些方法不需要,不想用,这在Mapper2.x是没法解决的。

Expand All @@ -33,7 +33,7 @@ public interface SelectMapper<T> {

拆分后我需要那些方法,我就继承那些方法。<b>你会不会觉得这样变的更麻烦了?</b>

##接口可以自定义搭配继承
## 接口可以自定义搭配继承

接上面的问题,<b>你会不会觉得这样变的更麻烦了?</b>

Expand Down Expand Up @@ -91,31 +91,31 @@ public interface Mapper<T> extends

像Mapper3中,提供了这么多的接口,难道都要一个个配置上吗?

##继承接口自动注册,只需要配置基础接口
## 继承接口自动注册,只需要配置基础接口

这个标题看着不顺,举个例子说明。

###第一种
### 第一种

如果我自己的整个项目中只用到了`Mapper<T>`接口,那么只配置一个`mappers=tk.mybatis.mapper.common.Mapper`即可。

`Mapper<T>`继承的所有父接口都会自动注册,因为父接口会自动注册,所以`mappers`配置`Mapper<T>`之后,所有的父接口都是可以单独用的。

也就是说我项目中的接口,可以自由搭配`Mapper<T>`父接口中的所有单独的接口。

###第二种
### 第二种

如果我创建了自己的`com.xxx.MyMapper<T>`,并且项目中只用到了自己的`com.xxx.MyMapper<T>`,那么只需要配置`mappers=com.xxx.MyMapper`即可。

从这一点应该很容易看出来,项目中的代码和通用Mapper完全解耦,建议你自己创建一个基础接口。

<b>个人建议创建一个自己的通用接口,方便将来的自由扩展和搭配</b>

###第三种
### 第三种

如果你使用的接口互相没有继承关系,那么你需要把这些接口都配置在`mappers`属性上,和Mapper2一样。

##极其简单的扩展方式
## 极其简单的扩展方式

除了Mapper2中支持的两种方式外([Mapper2扩展文档](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper/3.ExtendMapper.md)]

Expand Down
12 changes: 6 additions & 6 deletions wiki/mapper3/10.Mapper-UUID.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#通用 Mapper UUID 简单示例
# 通用 Mapper UUID 简单示例
通用 Mapper 中对 UUID 的用法主要提到了一种专有的写法,如下写法:
```java
@GeneratedValue(generator = "UUID")
Expand All @@ -11,7 +11,7 @@

而且在文档中也提到了一种可以回写的方式,由于很多人不理解或者尝试失败,因此很早就有必要写一篇如何使用可回写 UUID 的方式(我曾经远程协助一个朋友解决过这个问题,这个朋友答应我把自己的用法写下来分享给大家,可惜食言了)。

##可回写的 UUID
## 可回写的 UUID
最简单的可回写 UUID 方式就是像 Oracle 序列那样直接写一个返回 UUID 的 SQL 就能实现,这是第一种写法:
```java
@Id
Expand Down Expand Up @@ -43,17 +43,17 @@ mapperHelper.setConfig(config);

这么配置以后就可以正确的获取 UUID 的值了。

##任意类型的主键回写值
## 任意类型的主键回写值
你可能没注意到上面 UUID 类型的主键中,`id` 属性的类型是 `String`,因为`select uuid()` 返回的字符串,所以 Java 中的类型要和数据库类型匹配。

因此,如果你使用一个 `select myId()` 函数返回一个自定义类型的主键值,你需要让 Java 中的类型和这个匹配。

##通用主键 SQL 配置
## 通用主键 SQL 配置
如果你每一个实体类中都有一个 `id` 属性,并且配置的注解都一样,都执行同样的 SQL 去返回值。如果都去配置这个注解会很麻烦。想要解决这种重复性配置,最简单的方式就是提取基类,让使用相同方式主键策略的实体类继承同一个基类就能解决。

但是如果你需要适用不同的数据库,这种方式麻烦点的解决办法就是针对不同的数据库创建不同的基类,放在不同的项目中,但是使用相同的包名,具体应用到生产环境时使用对应数据库的基类 jar 包就可以。除此之外还有一种方式,这种方式就是使用 `IDENTITY`,这个参数用于配置取回主键的方式。

默认提供的 `IDENTITY` 可选值参考文档 [GenerationType.IDENTITY](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md#2-generatedvalue-strategy-=-generationtype-identity-_7)
默认提供的 `IDENTITY` 可选值参考文档 [GenerationType.IDENTITY](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md# 2-generatedvalue-strategy-=-generationtype-identity-_7) 。

这个参数除了这些可选值外,还可以是可以执行的 SQL,也就是说最前面的配置方式可以改为:
```java
Expand Down Expand Up @@ -90,5 +90,5 @@ mapperHelper.setConfig(config);
IDENTITY=select replace(newid(), '-', '')
```

##总结
## 总结
关于 UUID 的内容就上面这些,还需要提醒一点的就是由于 `ORDER` 是一个全局的配置,所以使用时要注意保证所有主键方式都是一致的 `ORDER` 方式,主键自增的时候使用 `@GeneratedValue(generator = "JDBC")` 这种方式通过 JDBC 接口去获取返回值更好。当然使用批量插入时,MySql 支持多主键回写,但是 SqlServer 仅能返回最后一个插入的主键,所以选择使用某种方式时,一定要有所了解,做好测试,避免数据库差异带来的问题。
16 changes: 8 additions & 8 deletions wiki/mapper3/2.Integration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#如何集成通用Mapper
# 如何集成通用Mapper

##添加Maven依赖或引入Jar包
## 添加Maven依赖或引入Jar包

如果你使用Maven,只需要添加如下依赖:

Expand All @@ -23,13 +23,13 @@ http://repo1.maven.org/maven2/tk/mybatis/mapper

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

##集成通用Mapper
## 集成通用Mapper

3.2.0版本以后配置更简单,以前的拦截器不能继续使用。

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

###1). Java编码方式
### 1). Java编码方式

```java
MapperHelper mapperHelper = new MapperHelper();
Expand All @@ -45,7 +45,7 @@ mapperHelper.registerMapper(Mapper.class);
mapperHelper.processConfiguration(session.getConfiguration());
```

###2). 纯Spring配置方式
### 2). 纯Spring配置方式

```xml
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
Expand All @@ -71,7 +71,7 @@ mapperHelper.processConfiguration(session.getConfiguration());
关于MyBatis-Spring详细配置的可以查看[MyBatis-Spring配置简单了解](http://blog.csdn.net/isea533/article/details/45640319)

<br><br><br><br><br><br><br>
##可配参数介绍
## 可配参数介绍

* `UUID`:设置生成UUID的方法,需要用OGNL方式配置,不限制返回值,但是必须和字段类型匹配
* `IDENTITY`:取回主键的方式,可以配置的内容看下一篇如何使用中的介绍
Expand All @@ -85,6 +85,6 @@ mapperHelper.processConfiguration(session.getConfiguration());

使用Properties文件配置时使用上面的属性名,使用`Config`类配置时,调用相应的setter即可。

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

#[返回首页](http://git.oschina.net/free/Mapper)
# [返回首页](http://git.oschina.net/free/Mapper)
24 changes: 12 additions & 12 deletions wiki/mapper3/3.2.Use330.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#3.3.0版本新增内容使用文档
# 3.3.0版本新增内容使用文档

##增加对动态表名的支持
## 增加对动态表名的支持

###新增`IDynamicTableName`接口:
### 新增`IDynamicTableName`接口:

```java
/**
Expand All @@ -22,9 +22,9 @@ public interface IDynamicTableName {
}
```

###一个动态表名的例子
### 一个动态表名的例子

####首先继承`IDynamicTableName`接口:
#### 首先继承`IDynamicTableName`接口:
```java
public class Country implements IDynamicTableName {

Expand Down Expand Up @@ -52,7 +52,7 @@ public class Country implements IDynamicTableName {
}
```

####测试代码:
#### 测试代码:

```java
CountryMapper mapper = sqlSession.getMapper(CountryMapper.class);
Expand All @@ -61,11 +61,11 @@ country.setDynamicTableName("country_123");
List<country> countryList = mapper.select(country);
```

####输出SQL:
#### 输出SQL:

`SELECT id,countryname,countrycode FROM country_123 ORDER BY id`

##`Example`增加了4个方法
## `Example`增加了4个方法

```java
/**
Expand Down Expand Up @@ -118,7 +118,7 @@ public Criteria andCondition(String condition, Object value, Class<? extends Typ
}
```

###`Example`新方法用法举例
### `Example`新方法用法举例
```java
Example example = new Example(Country.class);
example.createCriteria()
Expand All @@ -128,7 +128,7 @@ example.createCriteria()
List<Country> countries = mapper.selectByExample(example);
```

###输出SQL
### 输出SQL
```sql
SELECT id,countryname,countrycode
FROM Country
Expand All @@ -141,8 +141,8 @@ and countrycode = ?
ORDER BY id desc
```

##`@GeneratedValue(strategy = GenerationType.IDENTITY)`的一种重要用法说明:
## `@GeneratedValue(strategy = GenerationType.IDENTITY)`的一种重要用法说明:

`IDENTITY`除了[集成文档](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md#2-<code>-generatedvalue-strategy-=-generationtype-identity-<-code>)中的这些选项外,还可以是任意可以执行的SQL,例如MySql的`select uuid()`,SqlServer的`select newid()`等等,这种情况下需要保证主键的类型和SQL的返回值一致。
`IDENTITY`除了[集成文档](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md# 2-<code>-generatedvalue-strategy-=-generationtype-identity-<-code>)中的这些选项外,还可以是任意可以执行的SQL,例如MySql的`select uuid()`,SqlServer的`select newid()`等等,这种情况下需要保证主键的类型和SQL的返回值一致。

利用这一个特点,我们就可以使用可以回写的UUID值,如果想获得更特殊的主键值,可以自己写函数调用。
38 changes: 19 additions & 19 deletions wiki/mapper3/3.Use.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#如何使用通用Mapper
# 如何使用通用Mapper

[如何集成通用Mapper](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/2.Integration.md)

集成方法请看上面的文档,集成后,可以继续阅读本页文档。

##1. 继承通用的`Mapper<T>`,必须指定泛型`<T>`
## 1. 继承通用的`Mapper<T>`,必须指定泛型`<T>`

例如下面的例子:

Expand All @@ -18,7 +18,7 @@ public interface UserInfoMapper extends Mapper<UserInfo> {
一旦继承了`Mapper<T>`,继承的`Mapper`就拥有了`Mapper<T>`所有的通用方法。

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

实体类按照如下规则和数据库表进行转换,注解全部是JPA中的注解:

Expand Down Expand Up @@ -48,21 +48,21 @@ public interface UserInfoMapper extends Mapper<UserInfo> {

通过[使用Mapper专用的MyBatis生成器插件](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/7.UseMBG.md)可以直接生成符合要求带注解的实体类。

###重点强调`@Transient`注解
### 重点强调`@Transient`注解

许多人由于不仔细看文档,频繁在这个问题上出错。

如果你的实体类中包含了不是数据库表中的字段,你需要给这个字段加上`@Transient`注解,这样通用Mapper在处理单表操作时就不会将标注的属性当成表字段处理!
<br><br><br><br>

<br><br><br><br>
##3.主键策略(仅用于insert方法)
## 3.主键策略(仅用于insert方法)

通用Mapper还提供了序列(支持Oracle)、UUID(任意数据库,字段长度32)、主键自增(类似Mysql,Hsqldb)三种方式,其中序列和UUID可以配置多个,主键自增只能配置一个。

由于MySql自增主键最常用,所以这里从最简单的配置方式开始。

###1.`@GeneratedValue(generator = "JDBC")`
### 1.`@GeneratedValue(generator = "JDBC")`

```java
@Id
Expand All @@ -75,11 +75,11 @@ private Integer id;
```xml
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
values (# {username},# {password},# {email},# {bio})
</insert>
```

###2.`@GeneratedValue(strategy = GenerationType.IDENTITY)`
### 2.`@GeneratedValue(strategy = GenerationType.IDENTITY)`

这个注解适用于主键自增的情况,支持下面这些数据库:

Expand Down Expand Up @@ -115,13 +115,13 @@ private Integer id;
insert into Author
(id, username, password, email,bio, favourite_section)
values
(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
(# {id}, # {username}, # {password}, # {email}, # {bio}, # {favouriteSection,jdbcType=VARCHAR})
</insert>
```

注意`<selectKey>`中的内容就是`IDENTITY`参数值对应数据库的SQL

###3.`@GeneratedValue(generator = "UUID")`
### 3.`@GeneratedValue(generator = "UUID")`
```java
//可以用于任意字符串类型长度超过32位的字段
@GeneratedValue(generator = "UUID")
Expand All @@ -134,13 +134,13 @@ private String username;
insert into Author
(id, username, password, email,bio, favourite_section)
values
(#{id}, #{username_bind}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
(# {id}, # {username_bind}, # {password}, # {email}, # {bio}, # {favouriteSection,jdbcType=VARCHAR})
</insert>
```

**注意:这种方式不能回写,如果想要回写,请看 [通用 Mapper UUID 简单示例](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/10.Mapper-UUID.md)**

###4.Oracle使用序列
### 4.Oracle使用序列
```java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select SEQ_ID.nextval from dual")
Expand All @@ -160,13 +160,13 @@ private Integer id;
insert into Author
(id, username, password, email,bio, favourite_section)
values
(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
(# {id}, # {username}, # {password}, # {email}, # {bio}, # {favouriteSection,jdbcType=VARCHAR})
</insert>
```

##4. 将继承的Mapper接口添加到Mybatis配置中
## 4. 将继承的Mapper接口添加到Mybatis配置中

###非Spring项目中在mybatis配置文件中配置,如:
### 非Spring项目中在mybatis配置文件中配置,如:
```xml
<mappers>
<mapper class="tk.mybatis.mapper.mapper.CountryMapper" />
Expand All @@ -175,7 +175,7 @@ values
</mappers>
```

###Spring配置方式
### Spring配置方式

如果你在Spring中配置Mapper接口,不需要像上面这样一个个配置,只需要有下面的这个扫描Mapper接口的这个配置即可:
```xml
Expand All @@ -195,7 +195,7 @@ values

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

##5. 代码中使用
## 5. 代码中使用

例如下面这个简单的例子:
```java
Expand Down Expand Up @@ -246,12 +246,12 @@ try {

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

##6.其他
## 6.其他

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

**CameHumpInterceptor - Map结果的Key转为驼峰式**

http://git.oschina.net/free/Mybatis_Utils/tree/master/CameHumpMap

#[返回首页](http://git.oschina.net/free/Mapper)
# [返回首页](http://git.oschina.net/free/Mapper)
Loading

0 comments on commit dc2213f

Please sign in to comment.