Skip to content

Commit c8c5891

Browse files
committed
版本改为0.3.0,完善文档。
1 parent 09c6762 commit c8c5891

File tree

8 files changed

+298
-83
lines changed

8 files changed

+298
-83
lines changed

README.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,74 @@ Mybatis工具群: 211286137 (Mybatis相关工具插件等等)
2424

2525
推荐使用Mybatis分页插件:[PageHelper分页插件](https://github.com/pagehelper/Mybatis-PageHelper)
2626

27+
##v0.3.0版本说明
28+
29+
这个版本的主要目的是消除拦截器,因此针对常用的情况增加了两种更方便的使用方式。
30+
31+
对于单独使用Mybatis,通过如下方式创建`sqlSessionFactory`:
32+
```java
33+
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
34+
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
35+
reader.close();
36+
```
37+
如果你喜欢拦截器方式,那么你仍然可以在mybatis的配置文件中配置拦截器。
38+
39+
如果你想要更直接的JAVA编码方式,可以在初始化`sqlSessionFactory`的地方按照下面的方式操作:
40+
```java
41+
//从上面的sqlSessionFactory取出一个session
42+
session = sqlSessionFactory.openSession();
43+
//创建一个MapperHelper
44+
MapperHelper mapperHelper = new MapperHelper();
45+
// 设置UUID生成策略
46+
// 配置UUID生成策略需要使用OGNL表达式
47+
// 默认值32位长度:@java.util.UUID@randomUUID().toString().replace("-", "")
48+
mapperHelper.setUUID("");
49+
// 主键自增回写方法,默认值MYSQL,详细说明请看文档
50+
mapperHelper.setIDENTITY("HSQLDB");
51+
// 序列的获取规则,使用{num}格式化参数,默认值为{0}.nextval,针对Oracle
52+
// 可选参数一共3个,对应0,1,2,分别为SequenceName,ColumnName, PropertyName
53+
mapperHelper.setSeqFormat("NEXT VALUE FOR {0}");
54+
// 设置全局的catalog,默认为空,如果设置了值,操作表时的sql会是catalog.tablename
55+
mapperHelper.setCatalog("");
56+
// 设置全局的schema,默认为空,如果设置了值,操作表时的sql会是schema.tablename
57+
// 如果同时设置了catalog,优先使用catalog.tablename
58+
mapperHelper.setSchema("");
59+
// 主键自增回写方法执行顺序,默认AFTER,可选值为(BEFORE|AFTER)
60+
mapperHelper.setOrder("AFTER");
61+
// 注册通用Mapper接口
62+
mapperHelper.registerMapper(Mapper.class);
63+
mapperHelper.registerMapper(HsqldbMapper.class);
64+
//配置完成后,执行下面的操作
65+
mapperHelper.processConfiguration(session.getConfiguration());
66+
//OK - mapperHelper的任务已经完成,可以不管了
67+
```
68+
上面配置参数的时候,是一个个调用set方法进行的,你还可以使用`MapperHelper``MapperHelper(Properties properties)`构造方法,或者调用`setProperties(properties)`方法,通过`.properties`配置文件来配置。
69+
70+
使用JAVA编码方式不需要拦截器。如果你的情况适用于这种方式,推荐你用JAVA编码的方式处理。
71+
72+
**还有一种最常见的情况,那就是和Spring集成的情况。**
73+
在Spring中使用的时候,可以通过xml达到上面Java编码方式的效果。如下配置:
74+
```xml
75+
<bean class="com.github.abel533.mapper.MapperHelper" depends-on="sqlSession" init-method="initMapper">
76+
<property name="mappers">
77+
<array>
78+
<!-- 可以配置多个 -->
79+
<value>com.isea533.mybatis.mapperhelper.Mapper</value>
80+
</array>
81+
</property>
82+
<!-- 对于多数据源,这里也可以像上面这样配置多个 -->
83+
<property name="sqlSessions" ref="sqlSession"/>
84+
</bean>
85+
```
86+
可以看到配置中依赖了`sqlSession`,所以使用这种方式,你还要在Spring的配置中保证`sqlSession`存在。一般情况下都会在Spring定义`sqlSession`。一般的定义方法如下:
87+
```xml
88+
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
89+
<constructor-arg index="0" ref="sqlSessionFactory"/>
90+
</bean>
91+
```
92+
在Spring中使用这种方式的时候,Spring启动完成的时候,所有的通用Mapper都已经处理完成了。后面就可以直接使用通用方法,不需要拦截器来执行了。
93+
94+
2795
##v0.2.0版本说明
2896

2997
该版本做了大量的重构,在原有基础上增加了两个类,分别为`MapperTemplate``MapperProvider`,其他几个类都有相当大的改动。

src/main/java/com/github/abel533/mapper/MapperHelper.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ of this software and associated documentation files (the "Software"), to deal
3131
import org.apache.ibatis.builder.annotation.ProviderSqlSource;
3232
import org.apache.ibatis.mapping.MappedStatement;
3333
import org.apache.ibatis.session.Configuration;
34+
import org.apache.ibatis.session.SqlSession;
3435

3536
import java.lang.reflect.Method;
3637
import java.util.*;
@@ -77,6 +78,31 @@ public MapperHelper(Properties properties) {
7778
setProperties(properties);
7879
}
7980

81+
/**
82+
* 缓存初始化时的SqlSession
83+
*/
84+
private List<SqlSession> sqlSessions = new ArrayList<SqlSession>();
85+
86+
/**
87+
* 针对Spring注入需要处理的SqlSession
88+
*
89+
* @param sqlSessions
90+
*/
91+
public void setSqlSessions(SqlSession[] sqlSessions){
92+
if (sqlSessions != null && sqlSessions.length>0) {
93+
this.sqlSessions.addAll(Arrays.asList(sqlSessions));
94+
}
95+
}
96+
97+
/**
98+
* Spring初始化方法,使用Spring时需要配置init-method="initMapper"
99+
*/
100+
public void initMapper(){
101+
for (SqlSession sqlSession : sqlSessions) {
102+
processConfiguration(sqlSession.getConfiguration());
103+
}
104+
}
105+
80106
/**
81107
* 通过通用Mapper接口获取对应的MapperTemplate
82108
*
@@ -161,6 +187,19 @@ public void registerMapper(String mapperClass) {
161187
}
162188
}
163189

190+
/**
191+
* 方便Spring注入
192+
*
193+
* @param mappers
194+
*/
195+
public void setMappers(String[] mappers) {
196+
if (mappers != null && mappers.length > 0) {
197+
for (String mapper : mappers) {
198+
registerMapper(mapper);
199+
}
200+
}
201+
}
202+
164203
/**
165204
* IDENTITY的可选值
166205
*/

src/main/java/com/github/abel533/mapper/MapperSpring.java

Lines changed: 0 additions & 45 deletions
This file was deleted.
Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,18 @@
11
package com.github.abel533.mapper;
22

3-
import org.apache.ibatis.io.Resources;
4-
import org.apache.ibatis.jdbc.ScriptRunner;
53
import org.apache.ibatis.session.SqlSession;
6-
import org.apache.ibatis.session.SqlSessionFactory;
7-
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
8-
9-
import java.io.IOException;
10-
import java.io.Reader;
11-
import java.sql.Connection;
124

135
/**
146
* Description: MybatisHelper
157
* Author: liuzh
168
* Update: liuzh(2014-06-06 13:33)
179
*/
1810
public class MybatisHelper {
19-
20-
private static SqlSessionFactory sqlSessionFactory;
21-
22-
static {
23-
try {
24-
//创建SqlSessionFactory
25-
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
26-
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
27-
reader.close();
28-
//创建数据库
29-
SqlSession session = null;
30-
try {
31-
session = sqlSessionFactory.openSession();
32-
Connection conn = session.getConnection();
33-
reader = Resources.getResourceAsReader("CreateDB.sql");
34-
ScriptRunner runner = new ScriptRunner(conn);
35-
runner.setLogWriter(null);
36-
runner.runScript(reader);
37-
reader.close();
38-
} finally {
39-
if (session != null) {
40-
session.close();
41-
}
42-
}
43-
} catch (IOException e) {
44-
e.printStackTrace();
45-
}
46-
}
47-
4811
/**
4912
* 获取Session
5013
* @return
5114
*/
5215
public static SqlSession getSqlSession(){
53-
return sqlSessionFactory.openSession();
16+
return MybatisJavaHelper.getSqlSession();
5417
}
5518
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.github.abel533.mapper;
2+
3+
import com.github.abel533.hsqldb.HsqldbMapper;
4+
import org.apache.ibatis.io.Resources;
5+
import org.apache.ibatis.jdbc.ScriptRunner;
6+
import org.apache.ibatis.session.SqlSession;
7+
import org.apache.ibatis.session.SqlSessionFactory;
8+
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
9+
10+
import java.io.IOException;
11+
import java.io.Reader;
12+
import java.sql.Connection;
13+
14+
/**
15+
* Description: MybatisHelper
16+
* Author: liuzh
17+
* Update: liuzh(2014-06-06 13:33)
18+
*/
19+
public class MybatisJavaHelper {
20+
21+
private static SqlSessionFactory sqlSessionFactory;
22+
23+
static {
24+
try {
25+
//创建SqlSessionFactory
26+
Reader reader = Resources.getResourceAsReader("mybatis-java.xml");
27+
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
28+
reader.close();
29+
//创建数据库
30+
SqlSession session = null;
31+
try {
32+
session = sqlSessionFactory.openSession();
33+
//创建一个MapperHelper
34+
MapperHelper mapperHelper = new MapperHelper();
35+
// 设置UUID生成策略
36+
// 配置UUID生成策略需要使用OGNL表达式
37+
// 默认值32位长度:@java.util.UUID@randomUUID().toString().replace("-", "")
38+
mapperHelper.setUUID("");
39+
// 主键自增回写方法,默认值MYSQL,详细说明请看文档
40+
mapperHelper.setIDENTITY("HSQLDB");
41+
// 序列的获取规则,使用{num}格式化参数,默认值为{0}.nextval,针对Oracle
42+
// 可选参数一共3个,对应0,1,2,分别为SequenceName,ColumnName, PropertyName
43+
mapperHelper.setSeqFormat("NEXT VALUE FOR {0}");
44+
// 设置全局的catalog,默认为空,如果设置了值,操作表时的sql会是catalog.tablename
45+
mapperHelper.setCatalog("");
46+
// 设置全局的schema,默认为空,如果设置了值,操作表时的sql会是schema.tablename
47+
// 如果同时设置了catalog,优先使用catalog.tablename
48+
mapperHelper.setSchema("");
49+
// 主键自增回写方法执行顺序,默认AFTER,可选值为(BEFORE|AFTER)
50+
mapperHelper.setOrder("AFTER");
51+
// 注册通用Mapper接口
52+
mapperHelper.registerMapper(Mapper.class);
53+
mapperHelper.registerMapper(HsqldbMapper.class);
54+
//配置完成后,执行下面的操作
55+
mapperHelper.processConfiguration(session.getConfiguration());
56+
//OK - mapperHelper的任务已经完成,可以不管了
57+
58+
Connection conn = session.getConnection();
59+
reader = Resources.getResourceAsReader("CreateDB.sql");
60+
ScriptRunner runner = new ScriptRunner(conn);
61+
runner.setLogWriter(null);
62+
runner.runScript(reader);
63+
reader.close();
64+
} finally {
65+
if (session != null) {
66+
session.close();
67+
}
68+
}
69+
} catch (IOException e) {
70+
e.printStackTrace();
71+
}
72+
}
73+
74+
/**
75+
* 获取Session
76+
* @return
77+
*/
78+
public static SqlSession getSqlSession(){
79+
return sqlSessionFactory.openSession();
80+
}
81+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.github.abel533.mapper;
2+
3+
import org.apache.ibatis.io.Resources;
4+
import org.apache.ibatis.jdbc.ScriptRunner;
5+
import org.apache.ibatis.session.SqlSession;
6+
import org.apache.ibatis.session.SqlSessionFactory;
7+
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
8+
9+
import java.io.IOException;
10+
import java.io.Reader;
11+
import java.sql.Connection;
12+
13+
/**
14+
* Description: MybatisHelper
15+
* Author: liuzh
16+
* Update: liuzh(2014-06-06 13:33)
17+
*/
18+
public class MybatisXmlHelper {
19+
20+
private static SqlSessionFactory sqlSessionFactory;
21+
22+
static {
23+
try {
24+
//创建SqlSessionFactory
25+
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
26+
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
27+
reader.close();
28+
//创建数据库
29+
SqlSession session = null;
30+
try {
31+
session = sqlSessionFactory.openSession();
32+
Connection conn = session.getConnection();
33+
reader = Resources.getResourceAsReader("CreateDB.sql");
34+
ScriptRunner runner = new ScriptRunner(conn);
35+
runner.setLogWriter(null);
36+
runner.runScript(reader);
37+
reader.close();
38+
} finally {
39+
if (session != null) {
40+
session.close();
41+
}
42+
}
43+
} catch (IOException e) {
44+
e.printStackTrace();
45+
}
46+
}
47+
48+
/**
49+
* 获取Session
50+
* @return
51+
*/
52+
public static SqlSession getSqlSession(){
53+
return sqlSessionFactory.openSession();
54+
}
55+
}

0 commit comments

Comments
 (0)