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

Skip to content

Commit 300ad03

Browse files
committed
完善所有和PrimaryKey有关的通用查询
1 parent 9e28af9 commit 300ad03

File tree

4 files changed

+44
-29
lines changed

4 files changed

+44
-29
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ Country代码:
8686

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

89+
###开发版2.3.1-SNAPSHOT - 2015-04-07
90+
91+
* 完善所有和PrimaryKey有关的通用查询
92+
8993
###最新版本2.3.0 - 2015-04-05
9094

9195
* Mapper接口和EntityMapper都增加了`selectOne`方法,该查询返回值最多只能有一个,存在多个时抛出异常

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.3.0</version>
7+
<version>2.3.1-SNAPSHOT</version>
88
<packaging>jar</packaging>
99

1010
<name>mapper</name>

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

+35-28
Original file line numberDiff line numberDiff line change
@@ -312,30 +312,31 @@ public void deleteByPrimaryKey(MappedStatement ms) {
312312
*
313313
* @param ms
314314
*/
315-
public void updateByPrimaryKey(MappedStatement ms) {
316-
final Class<?> entityClass = getSelectReturnType(ms);
317-
//映射要包含set=?和where=?
318-
//获取set映射
319-
List<ParameterMapping> parameterMappings = getColumnParameterMappings(ms);
320-
//获取where主键映射
321-
parameterMappings.addAll(getPrimaryKeyParameterMappings(ms));
322-
//开始拼sql
323-
String sql = new SQL() {{
324-
//update table
325-
UPDATE(tableName(entityClass));
326-
//获取全部列
327-
Set<EntityHelper.EntityColumn> columnList = EntityHelper.getColumns(entityClass);
328-
//拼所有的set column = ?
329-
for (EntityHelper.EntityColumn column : columnList) {
330-
SET(column.getColumn() + " = ?");
315+
public SqlNode updateByPrimaryKey(MappedStatement ms) {
316+
Class<?> entityClass = getSelectReturnType(ms);
317+
List<SqlNode> sqlNodes = new ArrayList<SqlNode>();
318+
//update table
319+
sqlNodes.add(new StaticTextSqlNode("UPDATE " + tableName(entityClass)));
320+
//获取全部列
321+
Set<EntityHelper.EntityColumn> columnList = EntityHelper.getColumns(entityClass);
322+
List<SqlNode> ifNodes = new ArrayList<SqlNode>();
323+
for (EntityHelper.EntityColumn column : columnList) {
324+
if (!column.isId()) {
325+
ifNodes.add(new StaticTextSqlNode(column.getColumn() + " = #{" + column.getProperty() + "}, "));
331326
}
332-
//where 主键=#{property} 条件
333-
WHERE(EntityHelper.getPrimaryKeyWhere(entityClass));
334-
}}.toString();
335-
//静态SqlSource
336-
StaticSqlSource sqlSource = new StaticSqlSource(ms.getConfiguration(), sql, parameterMappings);
337-
//替换原有的SqlSource
338-
setSqlSource(ms, sqlSource);
327+
}
328+
sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes)));
329+
//获取全部的主键的列
330+
columnList = EntityHelper.getPKColumns(entityClass);
331+
List<SqlNode> whereNodes = new ArrayList<SqlNode>();
332+
boolean first = true;
333+
//where 主键=#{property} 条件
334+
for (EntityHelper.EntityColumn column : columnList) {
335+
whereNodes.add(getColumnEqualsProperty(column, first));
336+
first = false;
337+
}
338+
sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), new MixedSqlNode(whereNodes)));
339+
return new MixedSqlNode(sqlNodes);
339340
}
340341

341342
/**
@@ -354,8 +355,10 @@ public SqlNode updateByPrimaryKeySelective(MappedStatement ms) {
354355
List<SqlNode> ifNodes = new ArrayList<SqlNode>();
355356
//全部的if property!=null and property!=''
356357
for (EntityHelper.EntityColumn column : columnList) {
357-
StaticTextSqlNode columnNode = new StaticTextSqlNode(column.getColumn() + " = #{" + column.getProperty() + "}, ");
358-
ifNodes.add(getIfNotNull(column, columnNode));
358+
if (!column.isId()) {
359+
StaticTextSqlNode columnNode = new StaticTextSqlNode(column.getColumn() + " = #{" + column.getProperty() + "}, ");
360+
ifNodes.add(getIfNotNull(column, columnNode));
361+
}
359362
}
360363
sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes)));
361364
//获取全部的主键的列
@@ -450,8 +453,10 @@ public SqlNode updateByExampleSelective(MappedStatement ms) {
450453
List<SqlNode> ifNodes = new ArrayList<SqlNode>();
451454

452455
for (EntityHelper.EntityColumn column : columnList) {
453-
StaticTextSqlNode columnNode = new StaticTextSqlNode(column.getColumn() + " = #{record." + column.getProperty() + "}, ");
454-
ifNodes.add(new IfSqlNode(columnNode, "record." + column.getProperty() + " != null"));
456+
if (!column.isId()) {
457+
StaticTextSqlNode columnNode = new StaticTextSqlNode(column.getColumn() + " = #{record." + column.getProperty() + "}, ");
458+
ifNodes.add(new IfSqlNode(columnNode, "record." + column.getProperty() + " != null"));
459+
}
455460
}
456461
sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes)));
457462
//Example的Where
@@ -476,7 +481,9 @@ public SqlNode updateByExample(MappedStatement ms) {
476481
List<SqlNode> setSqlNodes = new ArrayList<SqlNode>();
477482
//全部的if property!=null and property!=''
478483
for (EntityHelper.EntityColumn column : columnList) {
479-
setSqlNodes.add(new StaticTextSqlNode(column.getColumn() + " = #{record." + column.getProperty() + "}, "));
484+
if (!column.isId()) {
485+
setSqlNodes.add(new StaticTextSqlNode(column.getColumn() + " = #{record." + column.getProperty() + "}, "));
486+
}
480487
}
481488
sqlNodes.add(new SetSqlNode(ms.getConfiguration(), new MixedSqlNode(setSqlNodes)));
482489
//Example的Where

src/test/java/com/github/abel533/test/user/TestBasic.java

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public void testInsert() {
4949

5050
Assert.assertEquals(1,mapper.deleteByPrimaryKey(userInfo));
5151
} finally {
52+
sqlSession.rollback();
5253
sqlSession.close();
5354
}
5455
}
@@ -76,6 +77,7 @@ public void testDelete() {
7677
//插入
7778
Assert.assertEquals(1, mapper.insert(userInfo));
7879
} finally {
80+
sqlSession.rollback();
7981
sqlSession.close();
8082
}
8183
}
@@ -117,6 +119,7 @@ public void testUpdateByPrimaryKey() {
117119
Assert.assertNull(userInfo.getUsertype());
118120
Assert.assertEquals("[email protected]", userInfo.getEmail());
119121
} finally {
122+
sqlSession.rollback();
120123
sqlSession.close();
121124
}
122125
}
@@ -140,6 +143,7 @@ public void testUpdateByPrimaryKeySelective() {
140143
Assert.assertEquals("1", userInfo.getUsertype());
141144
Assert.assertEquals("[email protected]", userInfo.getEmail());
142145
} finally {
146+
sqlSession.rollback();
143147
sqlSession.close();
144148
}
145149
}

0 commit comments

Comments
 (0)