Skip to content

Commit de03e59

Browse files
committed
mybatis mongo order 查询
1 parent 800a632 commit de03e59

File tree

12 files changed

+208
-50
lines changed

12 files changed

+208
-50
lines changed

.gitignore

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# Created by .ignore support plugin (hsz.mobi)
2+
### JetBrains template
3+
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
4+
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
5+
6+
# User-specific stuff
7+
.idea/**/workspace.xml
8+
.idea/**/tasks.xml
9+
.idea/**/usage.statistics.xml
10+
.idea/**/dictionaries
11+
.idea/**/shelf
12+
13+
# Generated files
14+
.idea/**/contentModel.xml
15+
16+
# Sensitive or high-churn files
17+
.idea/**/dataSources/
18+
.idea/**/dataSources.ids
19+
.idea/**/dataSources.local.xml
20+
.idea/**/sqlDataSources.xml
21+
.idea/**/dynamic.xml
22+
.idea/**/uiDesigner.xml
23+
.idea/**/dbnavigator.xml
24+
25+
# Gradle
26+
.idea/**/gradle.xml
27+
.idea/**/libraries
28+
29+
# Gradle and Maven with auto-import
30+
# When using Gradle or Maven with auto-import, you should exclude module files,
31+
# since they will be recreated, and may cause churn. Uncomment if using
32+
# auto-import.
33+
# .idea/artifacts
34+
# .idea/compiler.xml
35+
# .idea/jarRepositories.xml
36+
# .idea/modules.xml
37+
# .idea/*.iml
38+
# .idea/modules
39+
# *.iml
40+
# *.ipr
41+
42+
# CMake
43+
cmake-build-*/
44+
45+
# Mongo Explorer plugin
46+
.idea/**/mongoSettings.xml
47+
48+
# File-based project format
49+
*.iws
50+
51+
# IntelliJ
52+
out/
53+
54+
# mpeltonen/sbt-idea plugin
55+
.idea_modules/
56+
57+
# JIRA plugin
58+
atlassian-ide-plugin.xml
59+
60+
# Cursive Clojure plugin
61+
.idea/replstate.xml
62+
63+
# Crashlytics plugin (for Android Studio and IntelliJ)
64+
com_crashlytics_export_strings.xml
65+
crashlytics.properties
66+
crashlytics-build.properties
67+
fabric.properties
68+
69+
# Editor-based Rest Client
70+
.idea/httpRequests
71+
72+
# Android studio 3.1+ serialized cache file
73+
.idea/caches/build_file_checksums.ser
74+
75+
### Java template
76+
# Compiled class file
77+
*.class
78+
79+
# Log file
80+
*.log
81+
82+
# BlueJ files
83+
*.ctxt
84+
85+
# Mobile Tools for Java (J2ME)
86+
.mtj.tmp/
87+
88+
# Package Files #
89+
*.jar
90+
*.war
91+
*.nar
92+
*.ear
93+
*.zip
94+
*.tar.gz
95+
*.rar
96+
97+
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
98+
hs_err_pid*
99+

lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,19 @@
33
import com.github.xuejike.query.core.base.BaseNestedWhereQuery;
44
import com.github.xuejike.query.core.criteria.DaoCriteria;
55
import com.github.xuejike.query.core.criteria.InjectionBaseQuery;
6+
import com.github.xuejike.query.core.criteria.OrderCriteria;
7+
import com.github.xuejike.query.core.enums.OrderType;
8+
import com.github.xuejike.query.core.po.FieldInfo;
69
import com.github.xuejike.query.core.tool.lambda.FieldFunction;
10+
import com.github.xuejike.query.core.tool.lambda.LambdaTool;
11+
12+
import java.util.Arrays;
713

814
/**
915
* @author xuejike
1016
* @date 2020/12/18
1117
*/
12-
public class JkLambdaQuery<T> extends BaseNestedWhereQuery<T, FieldFunction<T,?>, JkLambdaQuery<T>> implements DaoCriteria<T> {
18+
public class JkLambdaQuery<T> extends BaseNestedWhereQuery<T, FieldFunction<T,?>, JkLambdaQuery<T>> implements DaoCriteria<T> , OrderCriteria<FieldFunction<T,?>, JkLambdaQuery<T>> {
1319
private DaoCriteria<T> daoCriteria;
1420

1521
public JkLambdaQuery(DaoCriteria<T> daoCriteria) {
@@ -24,4 +30,22 @@ public DaoCriteria<T> getDao() {
2430
return daoCriteria;
2531
}
2632

33+
34+
@Override
35+
public JkLambdaQuery<T> orderAsc(FieldFunction<T, ?>... fields) {
36+
Arrays.stream(fields).map(LambdaTool::getFieldInfo).forEach(it->{
37+
orderMap.put(it, OrderType.asc);
38+
});
39+
40+
return returnObj;
41+
}
42+
43+
@Override
44+
public JkLambdaQuery<T> orderDesc(FieldFunction<T, ?>... fields) {
45+
Arrays.stream(fields).map(LambdaTool::getFieldInfo).forEach(it->{
46+
orderMap.put(it, OrderType.desc);
47+
});
48+
49+
return returnObj;
50+
}
2751
}

lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseQuery.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseWhereQuery.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.hutool.core.collection.CollUtil;
44
import cn.hutool.log.Log;
55
import com.github.xuejike.query.core.criteria.*;
6+
import com.github.xuejike.query.core.enums.OrderType;
67
import com.github.xuejike.query.core.enums.StringMatchMode;
78
import com.github.xuejike.query.core.enums.WhereOperation;
89
import com.github.xuejike.query.core.exception.LambdaQueryException;
@@ -26,6 +27,7 @@ public class BaseWhereQuery<T,F,C> implements WhereCriteria<C,F>,SelectCriteria
2627
protected List<BaseWhereQuery<T,F,?>> orList = new LinkedList<>();
2728
protected List<FieldInfo> selectList = new LinkedList<>();
2829
protected List<FieldInfo> excludeList = new LinkedList<>();
30+
protected Map<FieldInfo, OrderType> orderMap = new ConcurrentHashMap<>();
2931
protected C returnObj = (C)this;
3032

3133
public BaseWhereQuery() {
@@ -220,7 +222,7 @@ public C between(boolean condition, F field, Object start, Object end) {
220222

221223

222224
public boolean isEmpty(){
223-
return CollUtil.isEmpty(whereMap) && CollUtil.isEmpty(orList);
225+
return CollUtil.isEmpty(whereMap) && CollUtil.isEmpty(orList) && CollUtil.isEmpty(selectList) && CollUtil.isEmpty(excludeList) && CollUtil.isEmpty(orderMap);
224226
}
225227
public boolean isNotEmpty(){
226228
return !isEmpty();
@@ -284,6 +286,9 @@ public QueryInfo buildQueryInfo(){
284286
return queryInfo;
285287
}
286288

289+
public Map<FieldInfo, OrderType> getOrderMap() {
290+
return orderMap;
291+
}
287292

288293
@Override
289294
public C select(F... fields) {

lambda-query-core/src/main/java/com/github/xuejike/query/core/criteria/DaoCriteria.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ default T findById(Serializable id){
4646
default boolean updateById(T entity){
4747
return getDao().updateById(entity);
4848
}
49+
50+
/**
51+
* 插入
52+
* @param entity
53+
* @return
54+
*/
55+
default T insert(T entity){
56+
return getDao().insert(entity);
57+
}
58+
4959
default Long updateFindAll(){
5060
return getDao().updateFindAll();
5161
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.xuejike.query.core.criteria;
22

3-
public interface OrderCriteria<T,F> {
4-
T orderAsc(F ...fields);
5-
T orderDesc(F ...fields);
3+
public interface OrderCriteria<F,R> {
4+
R orderAsc(F ...fields);
5+
R orderDesc(F ...fields);
66
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.xuejike.query.core.enums;
2+
3+
/**
4+
* @author xuejike
5+
* @date 2020/12/30
6+
*/
7+
public enum OrderType {
8+
desc,asc
9+
}

lambda-query-core/src/main/java/com/github/xuejike/query/core/po/FieldInfo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,5 @@ private void buildInfo(FieldFunction<?, ?> fieldFunction) {
5252
this.type = info.type;
5353
}
5454

55+
5556
}

lambda-query-core/src/test/java/Test.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import com.alibaba.fastjson.JSON;
2-
import com.github.xuejike.query.core.base.BaseQuery;
32
import com.github.xuejike.query.core.po.QueryInfo;
43
import com.github.xuejike.query.core.tool.lambda.CascadeField;
54

@@ -12,22 +11,6 @@ public class Test {
1211
public void t(){
1312

1413

15-
BaseQuery<TestBean> baseQuery = new BaseQuery<>(TestBean.class);
16-
QueryInfo queryInfo = baseQuery.eq(cascadeField().sub(TestBean::getSub).
17-
sub(TestBean.SubNameCls::getSubName)
18-
.subFieldName("xxx1")
19-
.subFieldName("xxx2"), "xx")
20-
.eq(TestBean::getSub, "xxx")
21-
.or()
22-
.eq(TestBean::getName, "666")
23-
.eq(TestBean::getSubList,"666666")
24-
.eq(TestBean::getSubArray,"666666")
25-
.gt(TestBean::getName,"n1").lt(TestBean::getName,"n2")
26-
.buildQueryInfo();
27-
System.out.println(JSON.toJSONString(queryInfo));
28-
System.out.println("666");
29-
cascadeField().subList(TestBean::getSubList).sub(TestBean.SubNameCls::getSub);
30-
3114

3215
}
3316

lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDao.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
import com.github.xuejike.query.core.base.BaseWhereQuery;
66
import com.github.xuejike.query.core.criteria.DaoCriteria;
77
import com.github.xuejike.query.core.criteria.IJPage;
8+
import com.github.xuejike.query.core.enums.OrderType;
89
import com.github.xuejike.query.core.po.FieldInfo;
910
import com.mongodb.client.result.DeleteResult;
1011
import org.bson.Document;
12+
import org.springframework.data.domain.Sort;
1113
import org.springframework.data.mongodb.core.MongoTemplate;
1214
import org.springframework.data.mongodb.core.query.Criteria;
1315
import org.springframework.data.mongodb.core.query.Field;
@@ -16,6 +18,9 @@
1618

1719
import java.io.Serializable;
1820
import java.util.List;
21+
import java.util.Map;
22+
import java.util.function.IntFunction;
23+
import java.util.stream.Collectors;
1924

2025
/**
2126
* @author xuejike
@@ -49,6 +54,17 @@ private Query buildQuery(){
4954
fields.exclude(MongoQueryBuilder.buildField(info));
5055
}
5156
}
57+
if (CollUtil.isNotEmpty(baseWhereQuery.getOrderMap())){
58+
Map<FieldInfo, OrderType> orderMap = baseWhereQuery.getOrderMap();
59+
List<Sort.Order> orderList = orderMap.entrySet().stream().map(it -> {
60+
if (it.getValue() == OrderType.desc) {
61+
return Sort.Order.desc(MongoQueryBuilder.buildField(it.getKey()));
62+
} else {
63+
return Sort.Order.asc(MongoQueryBuilder.buildField(it.getKey()));
64+
}
65+
}).collect(Collectors.toList());
66+
builder.with(Sort.by(orderList));
67+
}
5268
return builder;
5369

5470
}
@@ -100,6 +116,12 @@ public boolean updateById(T entity) {
100116
return true;
101117
}
102118

119+
@Override
120+
public T insert(T entity) {
121+
T insert = mongoTemplate.insert(entity);
122+
return insert;
123+
}
124+
103125
@Override
104126
public Long updateFindAll() {
105127
Query query = buildQuery();

0 commit comments

Comments
 (0)