Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ad0fcc8

Browse files
committed
Merge branch 'master' of https://github.com/abel533/Mapper
2 parents 5b82d67 + 29ae1b3 commit ad0fcc8

File tree

8 files changed

+557
-31
lines changed

8 files changed

+557
-31
lines changed

README.md

+10-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ Country代码:
8686

8787
##Maven坐标以及下载地址
8888

89-
###最新版本2.1.0
89+
###最新版本2.2.0
90+
91+
* 新增`SqlMapper`,可以使用MyBatis直接执行sql,[详细文档](http://git.oschina.net/free/Mapper/blob/master/wiki/UseSqlMapper.md)
92+
93+
###2.1.0
9094

9195
* 通用Mapper接口增加Example查询方法,包括以下方法:
9296

@@ -108,7 +112,7 @@ Country代码:
108112
<dependency>
109113
<groupId>com.github.abel533</groupId>
110114
<artifactId>mapper</artifactId>
111-
<version>2.1.0</version>
115+
<version>2.2.0</version>
112116
</dependency>
113117
```
114118

@@ -144,6 +148,10 @@ http://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/
144148

145149
3. [如何使用Mapper专用的MyBatis Generator插件](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper/5.UseMBG.md)
146150

151+
###如何使用SqlMapper
152+
153+
1. [如何使用SqlMapper](http://git.oschina.net/free/Mapper/blob/master/wiki/UseSqlMapper.md)
154+
147155
##作者信息
148156

149157
作者博客:http://blog.csdn.net/isea533

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>com.github.abel533</groupId>
66
<artifactId>mapper</artifactId>
7-
<version>2.2.0-SNAPSHOT</version>
7+
<version>2.2.0</version>
88
<packaging>jar</packaging>
99

1010
<name>mapper</name>

src/main/java/com/github/abel533/sql/SqlMapper.java

+157-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.abel533.sql;
22

33
import org.apache.ibatis.builder.StaticSqlSource;
4+
import org.apache.ibatis.exceptions.TooManyResultsException;
45
import org.apache.ibatis.mapping.*;
56
import org.apache.ibatis.scripting.LanguageDriver;
67
import org.apache.ibatis.session.Configuration;
@@ -18,25 +19,118 @@
1819
*/
1920
public class SqlMapper {
2021
private final MSUtils msUtils;
21-
private SqlSession sqlSession;
22+
private final SqlSession sqlSession;
2223

24+
/**
25+
* 构造方法,默认缓存MappedStatement
26+
*
27+
* @param sqlSession
28+
*/
2329
public SqlMapper(SqlSession sqlSession) {
2430
this.sqlSession = sqlSession;
2531
this.msUtils = new MSUtils(sqlSession.getConfiguration());
2632
}
2733

28-
public List<Map<String, Object>> select(String sql) {
34+
/**
35+
* 获取List中最多只有一个的数据
36+
*
37+
* @param list List结果
38+
* @param <T> 泛型类型
39+
* @return
40+
*/
41+
private <T> T getOne(List<T> list) {
42+
if (list.size() == 1) {
43+
return list.get(0);
44+
} else if (list.size() > 1) {
45+
throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + list.size());
46+
} else {
47+
return null;
48+
}
49+
}
50+
51+
/**
52+
* 查询返回一个结果,多个结果时抛出异常
53+
*
54+
* @param sql 执行的sql
55+
* @return
56+
*/
57+
public Map<String, Object> selectOne(String sql) {
58+
List<Map<String, Object>> list = selectList(sql);
59+
return getOne(list);
60+
}
61+
62+
/**
63+
* 查询返回一个结果,多个结果时抛出异常
64+
*
65+
* @param sql 执行的sql
66+
* @param value 参数
67+
* @return
68+
*/
69+
public Map<String, Object> selectOne(String sql, Object value) {
70+
List<Map<String, Object>> list = selectList(sql, value);
71+
return getOne(list);
72+
}
73+
74+
/**
75+
* 查询返回一个结果,多个结果时抛出异常
76+
*
77+
* @param sql 执行的sql
78+
* @param resultType 返回的结果类型
79+
* @param <T> 泛型类型
80+
* @return
81+
*/
82+
public <T> T selectOne(String sql, Class<T> resultType) {
83+
List<T> list = selectList(sql, resultType);
84+
return getOne(list);
85+
}
86+
87+
/**
88+
* 查询返回一个结果,多个结果时抛出异常
89+
*
90+
* @param sql 执行的sql
91+
* @param value 参数
92+
* @param resultType 返回的结果类型
93+
* @param <T> 泛型类型
94+
* @return
95+
*/
96+
public <T> T selectOne(String sql, Object value, Class<T> resultType) {
97+
List<T> list = selectList(sql, value, resultType);
98+
return getOne(list);
99+
}
100+
101+
/**
102+
* 查询返回List<Map<String, Object>>
103+
*
104+
* @param sql 执行的sql
105+
* @return
106+
*/
107+
public List<Map<String, Object>> selectList(String sql) {
29108
String msId = msUtils.select(sql);
30109
return sqlSession.selectList(msId);
31110
}
32111

33-
public List<Map<String, Object>> select(String sql, Object value) {
112+
/**
113+
* 查询返回List<Map<String, Object>>
114+
*
115+
* @param sql 执行的sql
116+
* @param value 参数
117+
* @return
118+
*/
119+
public List<Map<String, Object>> selectList(String sql, Object value) {
34120
Class<?> parameterType = value != null ? value.getClass() : null;
35121
String msId = msUtils.selectDynamic(sql, parameterType);
36122
return sqlSession.selectList(msId, value);
37123
}
38124

39-
public <T> List<T> select(String sql, Class<T> resultType) {
125+
/**
126+
* 查询返回指定的结果类型
127+
*
128+
* @param sql 执行的sql
129+
* @param resultType 返回的结果类型
130+
* @param <T> 泛型类型
131+
* @return
132+
*/
133+
public <T> List<T> selectList(String sql, Class<T> resultType) {
40134
String msId;
41135
if (resultType == null) {
42136
msId = msUtils.select(sql);
@@ -46,7 +140,16 @@ public <T> List<T> select(String sql, Class<T> resultType) {
46140
return sqlSession.selectList(msId);
47141
}
48142

49-
public <T> List<T> select(String sql, Object value, Class<T> resultType) {
143+
/**
144+
* 查询返回指定的结果类型
145+
*
146+
* @param sql 执行的sql
147+
* @param value 参数
148+
* @param resultType 返回的结果类型
149+
* @param <T> 泛型类型
150+
* @return
151+
*/
152+
public <T> List<T> selectList(String sql, Object value, Class<T> resultType) {
50153
String msId;
51154
Class<?> parameterType = value != null ? value.getClass() : null;
52155
if (resultType == null) {
@@ -57,37 +160,76 @@ public <T> List<T> select(String sql, Object value, Class<T> resultType) {
57160
return sqlSession.selectList(msId, value);
58161
}
59162

163+
/**
164+
* 插入数据
165+
*
166+
* @param sql 执行的sql
167+
* @return
168+
*/
60169
public int insert(String sql) {
61170
String msId = msUtils.insert(sql);
62171
return sqlSession.insert(msId);
63172
}
64173

174+
/**
175+
* 插入数据
176+
*
177+
* @param sql 执行的sql
178+
* @param value 参数
179+
* @return
180+
*/
65181
public int insert(String sql, Object value) {
66182
Class<?> parameterType = value != null ? value.getClass() : null;
67183
String msId = msUtils.insertDynamic(sql, parameterType);
68184
return sqlSession.insert(msId, value);
69185
}
70186

187+
/**
188+
* 更新数据
189+
*
190+
* @param sql 执行的sql
191+
* @return
192+
*/
71193
public int update(String sql) {
72194
String msId = msUtils.update(sql);
73-
return sqlSession.insert(msId);
195+
return sqlSession.update(msId);
74196
}
75197

198+
/**
199+
* 更新数据
200+
*
201+
* @param sql 执行的sql
202+
* @param value 参数
203+
* @return
204+
*/
76205
public int update(String sql, Object value) {
77206
Class<?> parameterType = value != null ? value.getClass() : null;
78207
String msId = msUtils.updateDynamic(sql, parameterType);
79-
return sqlSession.insert(msId, value);
208+
return sqlSession.update(msId, value);
80209
}
81210

211+
/**
212+
* 删除数据
213+
*
214+
* @param sql 执行的sql
215+
* @return
216+
*/
82217
public int delete(String sql) {
83-
String msId = msUtils.insert(sql);
218+
String msId = msUtils.delete(sql);
84219
return sqlSession.delete(msId);
85220
}
86221

222+
/**
223+
* 删除数据
224+
*
225+
* @param sql 执行的sql
226+
* @param value 参数
227+
* @return
228+
*/
87229
public int delete(String sql, Object value) {
88230
Class<?> parameterType = value != null ? value.getClass() : null;
89231
String msId = msUtils.deleteDynamic(sql, parameterType);
90-
return sqlSession.insert(msId, value);
232+
return sqlSession.delete(msId, value);
91233
}
92234

93235
private class MSUtils {
@@ -102,8 +244,8 @@ private MSUtils(Configuration configuration) {
102244
/**
103245
* 创建MSID
104246
*
105-
* @param sql
106-
* @param sqlCommandType
247+
* @param sql 执行的sql
248+
* @param sql 执行的sqlCommandType
107249
* @return
108250
*/
109251
private String newMsId(String sql, SqlCommandType sqlCommandType) {
@@ -126,8 +268,8 @@ private boolean hasMappedStatement(String msId) {
126268
* 创建一个查询的MS
127269
*
128270
* @param msId
129-
* @param sqlSource
130-
* @param resultType
271+
* @param sqlSource 执行的sqlSource
272+
* @param resultType 返回的结果类型
131273
*/
132274
private void newSelectMappedStatement(String msId, SqlSource sqlSource, final Class<?> resultType) {
133275
MappedStatement ms = new MappedStatement.Builder(configuration, msId, sqlSource, SqlCommandType.SELECT)
@@ -145,8 +287,8 @@ private void newSelectMappedStatement(String msId, SqlSource sqlSource, final Cl
145287
* 创建一个简单的MS
146288
*
147289
* @param msId
148-
* @param sqlSource
149-
* @param sqlCommandType
290+
* @param sqlSource 执行的sqlSource
291+
* @param sqlCommandType 执行的sqlCommandType
150292
*/
151293
private void newUpdateMappedStatement(String msId, SqlSource sqlSource, SqlCommandType sqlCommandType) {
152294
MappedStatement ms = new MappedStatement.Builder(configuration, msId, sqlSource, sqlCommandType)

src/test/java/com/github/abel533/sql/test/SelectTest.java renamed to src/test/java/com/github/abel533/sql/test/SelectListTest.java

+11-11
Original file line numberDiff line numberDiff line change
@@ -13,64 +13,64 @@
1313
/**
1414
* Created by liuzh on 2015/3/10.
1515
*/
16-
public class SelectTest {
16+
public class SelectListTest {
1717

1818
@Test
19-
public void testSqlHelperUpdate() {
19+
public void testSqlHelperSelectList() {
2020
SqlSession sqlSession = MybatisHelper.getSqlSession();
2121
SqlMapper sqlMapper = new SqlMapper(sqlSession);
2222
try {
23-
List<Map<String, Object>> list = sqlMapper.select("select * from country where id < 11");
23+
List<Map<String, Object>> list = sqlMapper.selectList("select * from country where id < 11");
2424
Assert.assertEquals(10, list.size());
2525
} finally {
2626
sqlSession.close();
2727
}
2828
}
2929

3030
@Test
31-
public void testSqlHelperUpdate2() {
31+
public void testSqlHelperSelectList2() {
3232
SqlSession sqlSession = MybatisHelper.getSqlSession();
3333
SqlMapper sqlMapper = new SqlMapper(sqlSession);
3434
try {
35-
List<Country> list = sqlMapper.select("select * from country where id < 11", Country.class);
35+
List<Country> list = sqlMapper.selectList("select * from country where id < 11", Country.class);
3636
Assert.assertEquals(10, list.size());
3737
} finally {
3838
sqlSession.close();
3939
}
4040
}
4141

4242
@Test
43-
public void testSqlHelperUpdate3() {
43+
public void testSqlHelperSelectList3() {
4444
SqlSession sqlSession = MybatisHelper.getSqlSession();
4545
SqlMapper sqlMapper = new SqlMapper(sqlSession);
4646
try {
47-
List<Map<String, Object>> list = sqlMapper.select("select * from country where id < #{id}", 11);
47+
List<Map<String, Object>> list = sqlMapper.selectList("select * from country where id < #{id}", 11);
4848
Assert.assertEquals(10, list.size());
4949
} finally {
5050
sqlSession.close();
5151
}
5252
}
5353

5454
@Test
55-
public void testSqlHelperUpdate4() {
55+
public void testSqlHelperSelectList4() {
5656
SqlSession sqlSession = MybatisHelper.getSqlSession();
5757
SqlMapper sqlMapper = new SqlMapper(sqlSession);
5858
try {
59-
List<Country> list = sqlMapper.select("select * from country where id < #{id}", 11, Country.class);
59+
List<Country> list = sqlMapper.selectList("select * from country where id < #{id}", 11, Country.class);
6060
Assert.assertEquals(10, list.size());
6161
} finally {
6262
sqlSession.close();
6363
}
6464
}
6565

6666
@Test
67-
public void testSqlHelperUpdate5() {
67+
public void testSqlHelperSelectList5() {
6868
SqlSession sqlSession = MybatisHelper.getSqlSession();
6969
SqlMapper sqlMapper = new SqlMapper(sqlSession);
7070
try {
7171
Country country = new Country();
7272
country.setId(11);
73-
List<Country> list = sqlMapper.select("<script>" +
73+
List<Country> list = sqlMapper.selectList("<script>" +
7474
"select * from country " +
7575
" <where>" +
7676
" <if test=\"id != null\">" +

0 commit comments

Comments
 (0)