Skip to content

Commit 4f63b30

Browse files
committed
提取公共方法,是实现更加简单
1 parent 0a3a446 commit 4f63b30

File tree

9 files changed

+292
-255
lines changed

9 files changed

+292
-255
lines changed

src/main/java/tk/mybatis/mapper/entity/EntityColumn.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,17 @@ public void setOrderBy(String orderBy) {
156156
* @return
157157
*/
158158
public String getColumnEqualsHolder() {
159-
return this.column + " = " + getColumnHolder();
159+
return getColumnEqualsHolder(null);
160+
}
161+
162+
/**
163+
* 返回格式如:colum = #{age,jdbcType=NUMERIC,typeHandler=MyTypeHandler}
164+
*
165+
* @param entityName
166+
* @return
167+
*/
168+
public String getColumnEqualsHolder(String entityName) {
169+
return this.column + " = " + getColumnHolder(entityName);
160170
}
161171

162172
/**

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

Lines changed: 231 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
package tk.mybatis.mapper.mapperhelper;
2626

2727
import tk.mybatis.mapper.entity.EntityColumn;
28-
import tk.mybatis.mapper.entity.EntityTable;
2928
import tk.mybatis.mapper.entity.IDynamicTableName;
3029
import tk.mybatis.mapper.util.StringUtil;
3130

@@ -69,12 +68,17 @@ public static String getDynamicTableName(Class<?> entityClass, String tableName)
6968
*/
7069
public static String getDynamicTableName(Class<?> entityClass, String tableName, String parameterName) {
7170
if (IDynamicTableName.class.isAssignableFrom(entityClass)) {
72-
return "<if test=\"@tk.mybatis.mapper.util.OGNL@isDynamicParameter(" + parameterName + ") and " + parameterName + ".dynamicTableName != null and " + parameterName + ".dynamicTableName != ''\">\n" +
73-
"${" + parameterName + ".dynamicTableName}\n" +
74-
"</if>\n" +
75-
"<if test=\"@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(" + parameterName + ") or " + parameterName + ".dynamicTableName == null or " + parameterName + ".dynamicTableName == ''\">\n" +
76-
tableName + "\n" +
77-
"</if>";
71+
if (StringUtil.isNotEmpty(parameterName)) {
72+
return "<if test=\"@tk.mybatis.mapper.util.OGNL@isDynamicParameter(" + parameterName + ") and " + parameterName + ".dynamicTableName != null and " + parameterName + ".dynamicTableName != ''\">\n" +
73+
"${" + parameterName + ".dynamicTableName}\n" +
74+
"</if>\n" +
75+
"<if test=\"@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(" + parameterName + ") or " + parameterName + ".dynamicTableName == null or " + parameterName + ".dynamicTableName == ''\">\n" +
76+
tableName + "\n" +
77+
"</if>";
78+
} else {
79+
return getDynamicTableName(entityClass, tableName);
80+
}
81+
7882
} else {
7983
return tableName;
8084
}
@@ -177,7 +181,11 @@ public static String getIfNotNull(String entityName, EntityColumn column, String
177181
}
178182
sql.append(column.getProperty()).append(" != null");
179183
if (empty && column.getJavaType().equals(String.class)) {
180-
sql.append(" and ").append(column.getProperty()).append(" != '' ");
184+
sql.append(" and ");
185+
if (StringUtil.isNotEmpty(entityName)) {
186+
sql.append(entityName).append(".");
187+
}
188+
sql.append(column.getProperty()).append(" != '' ");
181189
}
182190
sql.append("\">");
183191
sql.append(contents);
@@ -202,7 +210,11 @@ public static String getIfIsNull(String entityName, EntityColumn column, String
202210
}
203211
sql.append(column.getProperty()).append(" == null");
204212
if (empty && column.getJavaType().equals(String.class)) {
205-
sql.append(" or ").append(column.getProperty()).append(" == '' ");
213+
sql.append(" or ");
214+
if (StringUtil.isNotEmpty(entityName)) {
215+
sql.append(entityName).append(".");
216+
}
217+
sql.append(column.getProperty()).append(" == '' ");
206218
}
207219
sql.append("\">");
208220
sql.append(contents);
@@ -211,53 +223,242 @@ public static String getIfIsNull(String entityName, EntityColumn column, String
211223
}
212224

213225
/**
214-
* 获取 <code>[AND] column = #{property}</code>
226+
* 获取所有查询列,如id,name,code...
215227
*
216-
* @param column
217-
* @param first
228+
* @param entityClass
218229
* @return
219230
*/
220-
public static String getColumnEqualsProperty(EntityColumn column, boolean first) {
231+
public static String getAllColumns(Class<?> entityClass) {
232+
Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
221233
StringBuilder sql = new StringBuilder();
222-
if (!first) {
223-
sql.append(" AND ");
234+
for (EntityColumn entityColumn : columnList) {
235+
sql.append(entityColumn.getColumn()).append(",");
224236
}
225-
sql.append(column.getColumnEqualsHolder());
237+
return sql.substring(0, sql.length() - 1);
238+
}
239+
240+
/**
241+
* select xxx,xxx...
242+
*
243+
* @param entityClass
244+
* @return
245+
*/
246+
public static String selectAllColumns(Class<?> entityClass) {
247+
StringBuilder sql = new StringBuilder();
248+
sql.append("SELECT ");
249+
sql.append(getAllColumns(entityClass));
250+
sql.append(" ");
226251
return sql.toString();
227252
}
228253

229254
/**
230-
* 获取所有列的where节点中的if判断列
255+
* from tableName - 动态表名
231256
*
232-
* @param entityTable
233-
* @param empty
257+
* @param entityClass
258+
* @param defaultTableName
259+
* @return
260+
*/
261+
public static String fromTable(Class<?> entityClass, String defaultTableName) {
262+
StringBuilder sql = new StringBuilder();
263+
sql.append(" FROM ");
264+
sql.append(getDynamicTableName(entityClass, defaultTableName));
265+
sql.append(" ");
266+
return sql.toString();
267+
}
268+
269+
/**
270+
* update tableName - 动态表名
271+
*
272+
* @param entityClass
273+
* @param defaultTableName
274+
* @return
275+
*/
276+
public static String updateTable(Class<?> entityClass, String defaultTableName) {
277+
return updateTable(entityClass, defaultTableName, null);
278+
}
279+
280+
/**
281+
* update tableName - 动态表名
282+
*
283+
* @param entityClass
284+
* @param defaultTableName 默认表名
285+
* @param entityName 别名
286+
* @return
287+
*/
288+
public static String updateTable(Class<?> entityClass, String defaultTableName, String entityName) {
289+
StringBuilder sql = new StringBuilder();
290+
sql.append("UPDATE ");
291+
sql.append(getDynamicTableName(entityClass, defaultTableName, entityName));
292+
sql.append(" ");
293+
return sql.toString();
294+
}
295+
296+
/**
297+
* delete tableName - 动态表名
298+
*
299+
* @param entityClass
300+
* @param defaultTableName
301+
* @return
302+
*/
303+
public static String deleteFromTable(Class<?> entityClass, String defaultTableName) {
304+
StringBuilder sql = new StringBuilder();
305+
sql.append("DELETE FROM ");
306+
sql.append(getDynamicTableName(entityClass, defaultTableName));
307+
sql.append(" ");
308+
return sql.toString();
309+
}
310+
311+
/**
312+
* insert into tableName - 动态表名
313+
*
314+
* @param entityClass
315+
* @param defaultTableName
316+
* @return
317+
*/
318+
public static String insertIntoTable(Class<?> entityClass, String defaultTableName) {
319+
StringBuilder sql = new StringBuilder();
320+
sql.append("INSERT INTO ");
321+
sql.append(getDynamicTableName(entityClass, defaultTableName));
322+
sql.append(" ");
323+
return sql.toString();
324+
}
325+
326+
/**
327+
* insert table()列
328+
*
329+
* @param entityClass
330+
* @param skipId 是否从列中忽略id类型
331+
* @param notNull 是否判断!=null
332+
* @param notEmpty 是否判断String类型!=''
234333
* @return
235334
*/
236-
public static String getAllIfColumnNode(EntityTable entityTable, boolean empty) {
237-
Set<EntityColumn> columnList = entityTable.getEntityClassColumns();
238-
boolean first = true;
239-
StringBuilder sql = new StringBuilder(" <where> ");
335+
public static String insertColumns(Class<?> entityClass, boolean skipId, boolean notNull, boolean notEmpty) {
336+
StringBuilder sql = new StringBuilder();
337+
sql.append("<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">");
338+
//获取全部列
339+
Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
340+
//当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
240341
for (EntityColumn column : columnList) {
241-
sql.append(getIfNotNull(column, getColumnEqualsProperty(column, first), empty));
242-
first = false;
342+
if (skipId && !column.isId()) {
343+
if (notNull) {
344+
sql.append(SqlHelper.getIfNotNull(column, column.getColumn() + ",", notEmpty));
345+
} else {
346+
sql.append(column.getColumn() + ",");
347+
}
348+
}
349+
}
350+
sql.append("</trim>");
351+
return sql.toString();
352+
}
353+
354+
/**
355+
* insert-values()列
356+
*
357+
* @param entityClass
358+
* @param skipId 是否从列中忽略id类型
359+
* @param notNull 是否判断!=null
360+
* @param notEmpty 是否判断String类型!=''
361+
* @return
362+
*/
363+
public static String insertValuesColumns(Class<?> entityClass, boolean skipId, boolean notNull, boolean notEmpty) {
364+
StringBuilder sql = new StringBuilder();
365+
sql.append("<trim prefix=\"VALUES (\" suffix=\")\" suffixOverrides=\",\">");
366+
//获取全部列
367+
Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
368+
//当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
369+
for (EntityColumn column : columnList) {
370+
if (skipId && !column.isId()) {
371+
if (notNull) {
372+
sql.append(SqlHelper.getIfNotNull(column, column.getColumnHolder() + ",", notEmpty));
373+
} else {
374+
sql.append(column.getColumnHolder() + ",");
375+
}
376+
}
377+
}
378+
sql.append("</trim>");
379+
return sql.toString();
380+
}
381+
382+
/**
383+
* update set列
384+
*
385+
* @param entityClass
386+
* @param entityName 实体映射名
387+
* @param notNull 是否判断!=null
388+
* @param notEmpty 是否判断String类型!=''
389+
* @return
390+
*/
391+
public static String updateSetColumns(Class<?> entityClass, String entityName, boolean notNull, boolean notEmpty) {
392+
StringBuilder sql = new StringBuilder();
393+
sql.append("<set>");
394+
//获取全部列
395+
Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
396+
//当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
397+
for (EntityColumn column : columnList) {
398+
if (!column.isId()) {
399+
if (notNull) {
400+
sql.append(SqlHelper.getIfNotNull(entityName, column, column.getColumnEqualsHolder(entityName) + ",", notEmpty));
401+
} else {
402+
sql.append(column.getColumnEqualsHolder(entityName) + ",");
403+
}
404+
}
405+
}
406+
sql.append("</set>");
407+
return sql.toString();
408+
}
409+
410+
/**
411+
* where主键条件
412+
*
413+
* @param entityClass
414+
* @return
415+
*/
416+
public static String wherePKColumns(Class<?> entityClass) {
417+
StringBuilder sql = new StringBuilder();
418+
sql.append("<where>");
419+
//获取全部列
420+
Set<EntityColumn> columnList = EntityHelper.getPKColumns(entityClass);
421+
//当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
422+
for (EntityColumn column : columnList) {
423+
sql.append("AND " + column.getColumnEqualsHolder());
243424
}
244425
sql.append("</where>");
245426
return sql.toString();
246427
}
247428

248429
/**
249-
* 获取所有查询列,如id,name,code...
430+
* where所有列的条件,会判断是否!=null
250431
*
251432
* @param entityClass
252433
* @return
253434
*/
254-
public static String getAllColumns(Class<?> entityClass) {
435+
public static String whereAllIfColumns(Class<?> entityClass, boolean empty) {
436+
StringBuilder sql = new StringBuilder();
437+
sql.append("<where>");
438+
//获取全部列
255439
Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
440+
//当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
441+
for (EntityColumn column : columnList) {
442+
sql.append(getIfNotNull(column, "AND " + column.getColumnEqualsHolder(), empty));
443+
}
444+
sql.append("</where>");
445+
return sql.toString();
446+
}
447+
448+
/**
449+
* 获取默认的orderBy,通过注解设置的
450+
*
451+
* @param entityClass
452+
* @return
453+
*/
454+
public static String orderByDefault(Class<?> entityClass) {
256455
StringBuilder sql = new StringBuilder();
257-
for (EntityColumn entityColumn : columnList) {
258-
sql.append(entityColumn.getColumn()).append(",");
456+
String orderByClause = EntityHelper.getOrderByClause(entityClass);
457+
if (orderByClause.length() > 0) {
458+
sql.append(" ORDER BY ");
459+
sql.append(orderByClause);
259460
}
260-
return sql.substring(0, sql.length() - 1);
461+
return sql.toString();
261462
}
262463

263464
/**

0 commit comments

Comments
 (0)