|
25 | 25 | package tk.mybatis.mapper.provider;
|
26 | 26 |
|
27 | 27 | import org.apache.ibatis.mapping.MappedStatement;
|
28 |
| -import org.apache.ibatis.scripting.xmltags.*; |
29 | 28 | import tk.mybatis.mapper.entity.EntityColumn;
|
30 | 29 | import tk.mybatis.mapper.entity.EntityTable;
|
31 | 30 | import tk.mybatis.mapper.mapperhelper.EntityHelper;
|
32 | 31 | import tk.mybatis.mapper.mapperhelper.MapperHelper;
|
33 | 32 | import tk.mybatis.mapper.mapperhelper.MapperTemplate;
|
34 | 33 | import tk.mybatis.mapper.mapperhelper.SqlHelper;
|
35 | 34 |
|
36 |
| -import java.util.ArrayList; |
37 |
| -import java.util.List; |
38 | 35 | import java.util.Set;
|
39 | 36 |
|
40 | 37 | /**
|
@@ -94,38 +91,32 @@ public String insert(MappedStatement ms) {
|
94 | 91 | * @param ms
|
95 | 92 | * @return
|
96 | 93 | */
|
97 |
| - public SqlNode insertSelective(MappedStatement ms) { |
| 94 | + public String insertSelective(MappedStatement ms) { |
98 | 95 | Class<?> entityClass = getEntityClass(ms);
|
99 |
| - List<SqlNode> sqlNodes = new ArrayList<SqlNode>(); |
100 |
| - //insert into table |
101 |
| - sqlNodes.add(new StaticTextSqlNode("INSERT INTO ")); |
102 |
| - sqlNodes.add(getDynamicTableNameNode(entityClass)); |
103 |
| - |
| 96 | + StringBuilder sql = new StringBuilder(); |
| 97 | + sql.append("insert into "); |
| 98 | + sql.append(SqlHelper.getDynamicTableName(entityClass, tableName(entityClass))); |
| 99 | + sql.append("<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">"); |
104 | 100 | //获取全部列
|
105 | 101 | Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
|
106 |
| - List<SqlNode> ifNodes = new ArrayList<SqlNode>(); |
107 |
| - //Identity列只能有一个 |
108 |
| - Boolean hasIdentityKey = false; |
109 | 102 | //当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
|
110 | 103 | for (EntityColumn column : columnList) {
|
111 | 104 | //当使用序列时
|
112 | 105 | if (!column.isId()) {
|
113 |
| - ifNodes.add(getIfNotNull(column, new StaticTextSqlNode(column.getColumn() + ","))); |
| 106 | + sql.append(column.getColumn() + ","); |
114 | 107 | }
|
115 | 108 | }
|
116 |
| - //将动态的列加入sqlNodes |
117 |
| - sqlNodes.add(new TrimSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes), "(", null, ")", ",")); |
118 |
| - |
119 |
| - ifNodes = new ArrayList<SqlNode>(); |
| 109 | + sql.append("</trim>"); |
| 110 | + sql.append("VALUES"); |
| 111 | + sql.append("<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">"); |
120 | 112 | //处理values(#{property},#{property}...)
|
121 | 113 | for (EntityColumn column : columnList) {
|
122 | 114 | //当参数中的属性值不为空的时候,使用传入的值
|
123 | 115 | if (!column.isId()) {
|
124 |
| - ifNodes.add(new IfSqlNode(new StaticTextSqlNode(column.getColumnHolder() + ","), column.getProperty() + " != null ")); |
| 116 | + sql.append(SqlHelper.getIfNotNull(column, column.getColumnHolder() + ",", isNotEmpty())); |
125 | 117 | }
|
126 | 118 | }
|
127 |
| - //values(#{property},#{property}...) |
128 |
| - sqlNodes.add(new TrimSqlNode(ms.getConfiguration(), new MixedSqlNode(ifNodes), "VALUES (", null, ")", ",")); |
129 |
| - return new MixedSqlNode(sqlNodes); |
| 119 | + sql.append("</trim>"); |
| 120 | + return sql.toString(); |
130 | 121 | }
|
131 | 122 | }
|
0 commit comments