Skip to content

Commit 5c312c3

Browse files
committed
将delete,select,update中返回值SqlNode的方法都改为String形式
1 parent 976d4a2 commit 5c312c3

File tree

7 files changed

+205
-131
lines changed

7 files changed

+205
-131
lines changed

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

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -369,45 +369,6 @@ protected SqlNode getDynamicTableNameNode(Class<?> entityClass, String parameter
369369
}
370370
}
371371

372-
/**
373-
* 获取表名 - 支持动态表名
374-
*
375-
* @param entityClass
376-
* @return
377-
*/
378-
protected String getDynamicTableName(Class<?> entityClass) {
379-
if (IDynamicTableName.class.isAssignableFrom(entityClass)) {
380-
return "<if test=\"@tk.mybatis.mapper.util.OGNL@isDynamicParameter(_parameter) and dynamicTableName != null and dynamicTableName != ''\">\n" +
381-
"${dynamicTableName}\n" +
382-
"</if>\n" +
383-
"<if test=\"@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(_parameter) or dynamicTableName == null or dynamicTableName == ''\">\n" +
384-
tableName(entityClass) + "\n" +
385-
"</if>";
386-
} else {
387-
return tableName(entityClass);
388-
}
389-
}
390-
391-
/**
392-
* 获取表名 - 支持动态表名,该方法用于多个入参时,通过parameterName指定入参中实体类的@Param的注解值
393-
*
394-
* @param entityClass
395-
* @param parameterName
396-
* @return
397-
*/
398-
protected String getDynamicTableName(Class<?> entityClass, String parameterName) {
399-
if (IDynamicTableName.class.isAssignableFrom(entityClass)) {
400-
return "<if test=\"@tk.mybatis.mapper.util.OGNL@isDynamicParameter(" + parameterName + ") and " + parameterName + ".dynamicTableName != null and " + parameterName + ".dynamicTableName != ''\">\n" +
401-
"${" + parameterName + ".dynamicTableName}\n" +
402-
"</if>\n" +
403-
"<if test=\"@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(" + parameterName + ") or " + parameterName + ".dynamicTableName == null or " + parameterName + ".dynamicTableName == ''\">\n" +
404-
tableName(entityClass) + "\n" +
405-
"</if>";
406-
} else {
407-
return tableName(entityClass);
408-
}
409-
}
410-
411372
/**
412373
* 返回if条件的sqlNode
413374
* <p>一般类型:<code>&lt;if test="property!=null"&gt;columnNode&lt;/if&gt;</code></p>
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package tk.mybatis.mapper.mapperhelper;
2+
3+
import tk.mybatis.mapper.entity.EntityColumn;
4+
import tk.mybatis.mapper.entity.EntityTable;
5+
import tk.mybatis.mapper.entity.IDynamicTableName;
6+
7+
import java.util.Set;
8+
9+
/**
10+
* 拼常用SQL的工具类
11+
*
12+
* @author liuzh
13+
* @since 2015-11-03 22:40
14+
*/
15+
public class SqlHelper {
16+
17+
/**
18+
* 获取表名 - 支持动态表名
19+
*
20+
* @param entityClass
21+
* @param tableName
22+
* @return
23+
*/
24+
public static String getDynamicTableName(Class<?> entityClass, String tableName) {
25+
if (IDynamicTableName.class.isAssignableFrom(entityClass)) {
26+
return "<if test=\"@tk.mybatis.mapper.util.OGNL@isDynamicParameter(_parameter) and dynamicTableName != null and dynamicTableName != ''\">\n" +
27+
"${dynamicTableName}\n" +
28+
"</if>\n" +
29+
"<if test=\"@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(_parameter) or dynamicTableName == null or dynamicTableName == ''\">\n" +
30+
tableName + "\n" +
31+
"</if>";
32+
} else {
33+
return tableName;
34+
}
35+
}
36+
37+
/**
38+
* 获取表名 - 支持动态表名,该方法用于多个入参时,通过parameterName指定入参中实体类的@Param的注解值
39+
*
40+
* @param entityClass
41+
* @param tableName
42+
* @param parameterName
43+
* @return
44+
*/
45+
public static String getDynamicTableName(Class<?> entityClass, String tableName, String parameterName) {
46+
if (IDynamicTableName.class.isAssignableFrom(entityClass)) {
47+
return "<if test=\"@tk.mybatis.mapper.util.OGNL@isDynamicParameter(" + parameterName + ") and " + parameterName + ".dynamicTableName != null and " + parameterName + ".dynamicTableName != ''\">\n" +
48+
"${" + parameterName + ".dynamicTableName}\n" +
49+
"</if>\n" +
50+
"<if test=\"@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(" + parameterName + ") or " + parameterName + ".dynamicTableName == null or " + parameterName + ".dynamicTableName == ''\">\n" +
51+
tableName + "\n" +
52+
"</if>";
53+
} else {
54+
return tableName;
55+
}
56+
}
57+
58+
/**
59+
* 判断自动!=null的条件结构
60+
*
61+
* @param column
62+
* @param contents
63+
* @param empty
64+
* @return
65+
*/
66+
public static String getIfNotNull(EntityColumn column, String contents, boolean empty) {
67+
StringBuilder sql = new StringBuilder();
68+
sql.append("<if test=\"");
69+
sql.append(column.getProperty()).append(" != null");
70+
if (empty && column.getJavaType().equals(String.class)) {
71+
sql.append(" and ").append(column.getProperty()).append(" != '' ");
72+
}
73+
sql.append("\">");
74+
sql.append(contents);
75+
sql.append("</if>");
76+
return sql.toString();
77+
}
78+
79+
/**
80+
* 判断自动==null的条件结构
81+
*
82+
* @param column
83+
* @param contents
84+
* @param empty
85+
* @return
86+
*/
87+
public static String getIfIsNull(EntityColumn column, String contents, boolean empty) {
88+
StringBuilder sql = new StringBuilder();
89+
sql.append("<if test=\"");
90+
sql.append(column.getProperty()).append(" == null");
91+
if (empty && column.getJavaType().equals(String.class)) {
92+
sql.append(" or ").append(column.getProperty()).append(" == '' ");
93+
}
94+
sql.append("\">");
95+
sql.append(contents);
96+
sql.append("</if>");
97+
return sql.toString();
98+
}
99+
100+
/**
101+
* 获取 <code>[AND] column = #{property}</code>
102+
*
103+
* @param column
104+
* @param first
105+
* @return
106+
*/
107+
public static String getColumnEqualsProperty(EntityColumn column, boolean first) {
108+
StringBuilder sql = new StringBuilder();
109+
if (!first) {
110+
sql.append(" AND ");
111+
}
112+
sql.append(column.getColumnEqualsHolder());
113+
return sql.toString();
114+
}
115+
116+
/**
117+
* 获取所有列的where节点中的if判断列
118+
*
119+
* @param entityTable
120+
* @param empty
121+
* @return
122+
*/
123+
public static String getAllIfColumnNode(EntityTable entityTable, boolean empty) {
124+
Set<EntityColumn> columnList = entityTable.getEntityClassColumns();
125+
boolean first = true;
126+
StringBuilder sql = new StringBuilder(" <where> ");
127+
for (EntityColumn column : columnList) {
128+
sql.append(getIfNotNull(column, getColumnEqualsProperty(column, first), empty));
129+
first = false;
130+
}
131+
sql.append("</where>");
132+
return sql.toString();
133+
}
134+
135+
136+
}

src/main/java/tk/mybatis/mapper/provider/SpecialProvider.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import tk.mybatis.mapper.mapperhelper.EntityHelper;
3131
import tk.mybatis.mapper.mapperhelper.MapperHelper;
3232
import tk.mybatis.mapper.mapperhelper.MapperTemplate;
33+
import tk.mybatis.mapper.mapperhelper.SqlHelper;
3334

3435
/**
3536
* SpecialProvider实现类,特殊方法实现类
@@ -53,7 +54,7 @@ public String insertList(MappedStatement ms) {
5354
//开始拼sql
5455
StringBuilder sql = new StringBuilder();
5556
sql.append("insert into ");
56-
sql.append(getDynamicTableName(entityClass));
57+
sql.append(SqlHelper.getDynamicTableName(entityClass, tableName(entityClass)));
5758
sql.append("(");
5859
boolean first = true;
5960
for (EntityColumn column : table.getEntityClassColumns()) {
@@ -74,7 +75,7 @@ public String insertList(MappedStatement ms) {
7475
if (column.isId()) {
7576
continue;
7677
}
77-
if(!first) {
78+
if (!first) {
7879
sql.append(",");
7980
}
8081
sql.append(column.getColumnHolder("record"));
@@ -96,14 +97,14 @@ public String insertUseGeneratedKeys(MappedStatement ms) {
9697
//开始拼sql
9798
StringBuilder sql = new StringBuilder();
9899
sql.append("insert into ");
99-
sql.append(getDynamicTableName(entityClass));
100+
sql.append(SqlHelper.getDynamicTableName(entityClass, tableName(entityClass)));
100101
sql.append("(");
101102
boolean first = true;
102103
for (EntityColumn column : table.getEntityClassColumns()) {
103104
if (column.isId()) {
104105
continue;
105106
}
106-
if(!first) {
107+
if (!first) {
107108
sql.append(",");
108109
}
109110
sql.append(column.getColumn());
@@ -115,7 +116,7 @@ public String insertUseGeneratedKeys(MappedStatement ms) {
115116
if (column.isId()) {
116117
continue;
117118
}
118-
if(!first) {
119+
if (!first) {
119120
sql.append(",");
120121
}
121122
sql.append(column.getColumnHolder());

src/main/java/tk/mybatis/mapper/provider/SqlServerProvider.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import tk.mybatis.mapper.mapperhelper.EntityHelper;
3232
import tk.mybatis.mapper.mapperhelper.MapperHelper;
3333
import tk.mybatis.mapper.mapperhelper.MapperTemplate;
34+
import tk.mybatis.mapper.mapperhelper.SqlHelper;
3435

3536
import java.util.ArrayList;
3637
import java.util.List;
@@ -58,14 +59,14 @@ public String insert(MappedStatement ms) {
5859
//开始拼sql
5960
StringBuilder sql = new StringBuilder();
6061
sql.append("insert into ");
61-
sql.append(getDynamicTableName(entityClass));
62+
sql.append(SqlHelper.getDynamicTableName(entityClass, tableName(entityClass)));
6263
sql.append("(");
6364
boolean first = true;
6465
for (EntityColumn column : table.getEntityClassColumns()) {
6566
if (column.isId()) {
6667
continue;
6768
}
68-
if(!first) {
69+
if (!first) {
6970
sql.append(",");
7071
}
7172
sql.append(column.getColumn());
@@ -77,7 +78,7 @@ public String insert(MappedStatement ms) {
7778
if (column.isId()) {
7879
continue;
7980
}
80-
if(!first) {
81+
if (!first) {
8182
sql.append(",");
8283
}
8384
sql.append(column.getColumnHolder());
@@ -120,7 +121,7 @@ public SqlNode insertSelective(MappedStatement ms) {
120121
for (EntityColumn column : columnList) {
121122
//当参数中的属性值不为空的时候,使用传入的值
122123
if (!column.isId()) {
123-
ifNodes.add(new IfSqlNode(new StaticTextSqlNode(column.getColumnHolder() +","), column.getProperty() + " != null "));
124+
ifNodes.add(new IfSqlNode(new StaticTextSqlNode(column.getColumnHolder() + ","), column.getProperty() + " != null "));
124125
}
125126
}
126127
//values(#{property},#{property}...)

src/main/java/tk/mybatis/mapper/provider/base/BaseDeleteProvider.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,10 @@
2525
package tk.mybatis.mapper.provider.base;
2626

2727
import org.apache.ibatis.mapping.MappedStatement;
28-
import org.apache.ibatis.scripting.xmltags.MixedSqlNode;
29-
import org.apache.ibatis.scripting.xmltags.SqlNode;
30-
import org.apache.ibatis.scripting.xmltags.StaticTextSqlNode;
31-
import org.apache.ibatis.scripting.xmltags.WhereSqlNode;
3228
import tk.mybatis.mapper.mapperhelper.EntityHelper;
3329
import tk.mybatis.mapper.mapperhelper.MapperHelper;
3430
import tk.mybatis.mapper.mapperhelper.MapperTemplate;
35-
36-
import java.util.ArrayList;
37-
import java.util.List;
31+
import tk.mybatis.mapper.mapperhelper.SqlHelper;
3832

3933
/**
4034
* BaseDeleteMapper实现类,基础方法实现类
@@ -53,15 +47,13 @@ public BaseDeleteProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
5347
* @param ms
5448
* @return
5549
*/
56-
public SqlNode delete(MappedStatement ms) {
50+
public String delete(MappedStatement ms) {
5751
Class<?> entityClass = getEntityClass(ms);
58-
List<SqlNode> sqlNodes = new ArrayList<SqlNode>();
59-
//delete from table
60-
sqlNodes.add(new StaticTextSqlNode("DELETE FROM "));
61-
sqlNodes.add(getDynamicTableNameNode(entityClass));
62-
//where/if判断条件
63-
sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), getAllIfColumnNode(entityClass)));
64-
return new MixedSqlNode(sqlNodes);
52+
StringBuilder sql = new StringBuilder();
53+
sql.append("DELETE FROM ");
54+
sql.append(SqlHelper.getDynamicTableName(entityClass, tableName(entityClass)));
55+
sql.append(SqlHelper.getAllIfColumnNode(EntityHelper.getEntityTable(entityClass), isNotEmpty()));
56+
return sql.toString();
6557
}
6658

6759
/**
@@ -73,7 +65,7 @@ public String deleteByPrimaryKey(MappedStatement ms) {
7365
final Class<?> entityClass = getEntityClass(ms);
7466
StringBuilder sql = new StringBuilder();
7567
sql.append("delete from ");
76-
sql.append(getDynamicTableName(entityClass));
68+
sql.append(SqlHelper.getDynamicTableName(entityClass, tableName(entityClass)));
7769
sql.append(" where ");
7870
sql.append(EntityHelper.getPrimaryKeyWhere(entityClass));
7971
return sql.toString();

0 commit comments

Comments
 (0)