Skip to content

Commit a65d90c

Browse files
committed
Mapper接口和EntityMapper返回List<T>的查询,增加默认的order by支持
1 parent de9eaa7 commit a65d90c

File tree

4 files changed

+24
-19
lines changed

4 files changed

+24
-19
lines changed

src/main/java/com/github/abel533/entity/BaseProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,15 @@ protected MetaObject getExample(Map<String, Object> params) {
121121
/**
122122
* Example条件
123123
*/
124-
protected void applyOrderBy(SQL sql, MetaObject example) {
124+
protected void applyOrderBy(SQL sql, MetaObject example, String defaultOrderByClause) {
125125
if (example == null) {
126126
return;
127127
}
128128
Object orderBy = example.getValue("orderByClause");
129129
if (orderBy != null) {
130130
sql.ORDER_BY((String) orderBy);
131+
} else if (defaultOrderByClause != null && defaultOrderByClause.length() > 0) {
132+
sql.ORDER_BY(defaultOrderByClause);
131133
}
132134
}
133135

src/main/java/com/github/abel533/entity/CommonProvider.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,9 @@ public String select(final Map<String, Object> params) {
6565
}
6666
}
6767
}
68-
StringBuilder orderBy = new StringBuilder();
69-
for (EntityHelper.EntityColumn column : entityTable.getEntityClassColumns()) {
70-
if (column.getOrderBy() != null) {
71-
orderBy.append(column.getColumn()).append(" ").append(column.getOrderBy()).append(",");
72-
}
73-
}
74-
if (orderBy.length() > 0) {
75-
ORDER_BY(orderBy.substring(0, orderBy.length() - 1));
68+
StringBuilder orderByClause = EntityHelper.getOrderByClause(entityClass);
69+
if (orderByClause.length() > 0) {
70+
ORDER_BY(orderByClause.toString());
7671
}
7772
}}.toString();
7873
}
@@ -338,7 +333,7 @@ public String selectByExample(final Map<String, Object> params) {
338333
SELECT(EntityHelper.getAllColumns(entityClass));
339334
FROM(entityTable.getName());
340335
applyWhere(this, example);
341-
applyOrderBy(this, example);
336+
applyOrderBy(this, example, EntityHelper.getOrderByClause(entityClass).toString());
342337
}}.toString();
343338
}
344339

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ public SqlNode select(MappedStatement ms) {
8787
+ tableName(entityClass)));
8888
//将if添加到<where>
8989
sqlNodes.add(new WhereSqlNode(ms.getConfiguration(), getAllIfColumnNode(entityClass)));
90-
String orderByClause = EntityHelper.getOrderByClause(entityClass);
90+
StringBuilder orderByClause = EntityHelper.getOrderByClause(entityClass);
9191
if (orderByClause.length() > 0) {
92-
sqlNodes.add(new StaticTextSqlNode(orderByClause));
92+
sqlNodes.add(new StaticTextSqlNode(orderByClause.insert(0, "ORDER BY ").toString()));
9393
}
9494
return new MixedSqlNode(sqlNodes);
9595
}
@@ -426,6 +426,11 @@ public SqlNode selectByExample(MappedStatement ms) {
426426
sqlNodes.add(ifNullSqlNode);
427427
IfSqlNode orderByClauseSqlNode = new IfSqlNode(new TextSqlNode("order by ${orderByClause}"), "orderByClause != null");
428428
sqlNodes.add(orderByClauseSqlNode);
429+
StringBuilder orderByClause = EntityHelper.getOrderByClause(entityClass);
430+
if (orderByClause.length() > 0) {
431+
IfSqlNode defaultOrderByClauseSqlNode = new IfSqlNode(new StaticTextSqlNode(orderByClause.insert(0, "ORDER BY ").toString()), "orderByClause == null");
432+
sqlNodes.add(defaultOrderByClauseSqlNode);
433+
}
429434
return new MixedSqlNode(sqlNodes);
430435
}
431436

src/main/java/com/github/abel533/mapperhelper/EntityHelper.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public static class EntityTable {
4949
private String name;
5050
private String catalog;
5151
private String schema;
52+
private StringBuilder orderByClause;
5253
//实体类 => 全部列属性
5354
private Set<EntityColumn> entityClassColumns;
5455
//实体类 => 主键信息
@@ -248,20 +249,22 @@ public static EntityTable getEntityTable(Class<?> entityClass) {
248249
* @param entityClass
249250
* @return
250251
*/
251-
public static String getOrderByClause(Class<?> entityClass){
252+
public static StringBuilder getOrderByClause(Class<?> entityClass) {
253+
EntityTable table = getEntityTable(entityClass);
254+
if (table.orderByClause != null) {
255+
return table.orderByClause;
256+
}
252257
StringBuilder orderBy = new StringBuilder();
253-
for (EntityHelper.EntityColumn column : getColumns(entityClass)) {
258+
for (EntityHelper.EntityColumn column : table.getEntityClassColumns()) {
254259
if (column.getOrderBy() != null) {
255-
if(orderBy.length()!=0){
260+
if (orderBy.length() != 0) {
256261
orderBy.append(",");
257262
}
258263
orderBy.append(column.getColumn()).append(" ").append(column.getOrderBy());
259264
}
260265
}
261-
if (orderBy.length() > 0) {
262-
orderBy.insert(0, "ORDER BY ");
263-
}
264-
return orderBy.toString();
266+
table.orderByClause = orderBy;
267+
return table.orderByClause;
265268
}
266269

267270
/**

0 commit comments

Comments
 (0)