From 9944d783901f1eb6c90ab51689d50db3bf223e3b Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Thu, 31 Dec 2020 11:11:23 +0800
Subject: [PATCH 01/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8D=95=E5=85=83?=
=?UTF-8?q?=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lambda-query-core/pom.xml | 7 +-----
lambda-query-core/src/test/java/Test.java | 20 ---------------
lambda-query-core/src/test/java/TestBean.java | 25 -------------------
3 files changed, 1 insertion(+), 51 deletions(-)
delete mode 100644 lambda-query-core/src/test/java/Test.java
delete mode 100644 lambda-query-core/src/test/java/TestBean.java
diff --git a/lambda-query-core/pom.xml b/lambda-query-core/pom.xml
index 99105df..968c698 100644
--- a/lambda-query-core/pom.xml
+++ b/lambda-query-core/pom.xml
@@ -36,12 +36,7 @@
1.18.16
provided
-
- junit
- junit
- 4.12
- test
-
+
diff --git a/lambda-query-core/src/test/java/Test.java b/lambda-query-core/src/test/java/Test.java
deleted file mode 100644
index 4f3c0c5..0000000
--- a/lambda-query-core/src/test/java/Test.java
+++ /dev/null
@@ -1,20 +0,0 @@
-import com.alibaba.fastjson.JSON;
-import com.github.xuejike.query.core.po.QueryInfo;
-import com.github.xuejike.query.core.tool.lambda.CascadeField;
-
-/**
- * @author xuejike
- * @date 2020/12/18
- */
-public class Test {
- @org.junit.Test
- public void t(){
-
-
-
- }
-
- public static CascadeField cascadeField(){
- return new CascadeField<>();
- }
-}
diff --git a/lambda-query-core/src/test/java/TestBean.java b/lambda-query-core/src/test/java/TestBean.java
deleted file mode 100644
index 3a3390c..0000000
--- a/lambda-query-core/src/test/java/TestBean.java
+++ /dev/null
@@ -1,25 +0,0 @@
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author xuejike
- * @date 2020/12/18
- */
-@Data
-public class TestBean {
- private String name;
- private SubNameCls sub;
- private List subList;
- private SubNameCls[] subArray;
-
- @Data
- public static class SubNameCls{
- private String subName;
- private Sub1NameCls sub;
- }
- @Data
- public static class Sub1NameCls{
- private String subName;
- }
-}
From 40b25476f5a0896b345f7f02352cb49c7d86ba4c Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Thu, 31 Dec 2020 11:13:11 +0800
Subject: [PATCH 02/17] =?UTF-8?q?1.0.2=20=E5=BC=80=E5=8F=91=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lambda-query-core/pom.xml | 4 ++--
lambda-query-mongo-starter/pom.xml | 2 +-
lambda-query-mongo/pom.xml | 4 ++--
lambda-query-mybatis-plus-starter/pom.xml | 2 +-
lambda-query-mybatis-plus/pom.xml | 2 +-
mongo-demo/pom.xml | 2 +-
pom.xml | 4 ++--
update-version.sh | 3 ++-
8 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/lambda-query-core/pom.xml b/lambda-query-core/pom.xml
index 968c698..b150836 100644
--- a/lambda-query-core/pom.xml
+++ b/lambda-query-core/pom.xml
@@ -5,12 +5,12 @@
lambda-query
com.github.xuejike
- 1.0.1
+ 1.0.2-SNAPSHOT
lambda-query-core
lambda-query-core
Demo project for Spring Boot
- 1.0.1
+ 1.0.2-SNAPSHOT
diff --git a/lambda-query-mongo-starter/pom.xml b/lambda-query-mongo-starter/pom.xml
index 4745fb8..3225d97 100644
--- a/lambda-query-mongo-starter/pom.xml
+++ b/lambda-query-mongo-starter/pom.xml
@@ -5,7 +5,7 @@
lambda-query
com.github.xuejike
- 1.0.1
+ 1.0.2-SNAPSHOT
4.0.0
diff --git a/lambda-query-mongo/pom.xml b/lambda-query-mongo/pom.xml
index 6cac8be..2609964 100644
--- a/lambda-query-mongo/pom.xml
+++ b/lambda-query-mongo/pom.xml
@@ -5,12 +5,12 @@
lambda-query
com.github.xuejike
- 1.0.1
+ 1.0.2-SNAPSHOT
lambda-query-mongo
lambda-query-mongo
Demo project for Spring Boot
- 1.0.1
+ 1.0.2-SNAPSHOT
diff --git a/lambda-query-mybatis-plus-starter/pom.xml b/lambda-query-mybatis-plus-starter/pom.xml
index 49e5db5..7b5f913 100644
--- a/lambda-query-mybatis-plus-starter/pom.xml
+++ b/lambda-query-mybatis-plus-starter/pom.xml
@@ -5,7 +5,7 @@
lambda-query
com.github.xuejike
- 1.0.1
+ 1.0.2-SNAPSHOT
4.0.0
diff --git a/lambda-query-mybatis-plus/pom.xml b/lambda-query-mybatis-plus/pom.xml
index 73157cc..12a654b 100644
--- a/lambda-query-mybatis-plus/pom.xml
+++ b/lambda-query-mybatis-plus/pom.xml
@@ -5,7 +5,7 @@
lambda-query
com.github.xuejike
- 1.0.1
+ 1.0.2-SNAPSHOT
4.0.0
diff --git a/mongo-demo/pom.xml b/mongo-demo/pom.xml
index c435823..9cd1c52 100644
--- a/mongo-demo/pom.xml
+++ b/mongo-demo/pom.xml
@@ -5,7 +5,7 @@
lambda-query
com.github.xuejike
- 1.0.1
+ 1.0.2-SNAPSHOT
4.0.0
diff --git a/pom.xml b/pom.xml
index 4b483dc..a202e48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.github.xuejike
lambda-query
- 1.0.1
+ 1.0.2-SNAPSHOT
lambda-query
https://gitee.com/xuejike/lambda-query.git
@@ -45,7 +45,7 @@
1.8
1.8
1.8
- 1.0.1
+ 1.0.2-SNAPSHOT
UTF-8
diff --git a/update-version.sh b/update-version.sh
index 297005c..eab0d39 100644
--- a/update-version.sh
+++ b/update-version.sh
@@ -1,3 +1,4 @@
#!/usr/bin/env bash
-mvn versions:set -DnewVersion=1.0.1
+mvn versions:set -DnewVersion=1.0.2-SNAPSHOT
+#mvn versions:set -DnewVersion=1.0.1
mvn versions:commit
\ No newline at end of file
From 2224cc30ef2835f7b93685d0c91c068e3d506738 Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Thu, 31 Dec 2020 17:15:29 +0800
Subject: [PATCH 03/17] =?UTF-8?q?loadRef=20=20=E5=8A=A0=E8=BD=BD=E5=BC=95?=
=?UTF-8?q?=E7=94=A8=E6=95=B0=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 20 +--
lambda-query-core/pom.xml | 16 +++
.../xuejike/query/core/JkLambdaQuery.java | 19 +--
.../github/xuejike/query/core/JkQuerys.java | 3 +-
.../query/core/annotation/RefValue.java | 16 +++
.../query/core/annotation/SetRefValue.java | 16 +++
.../xuejike/query/core/base/BaseDao.java | 2 +
.../query/core/base/BaseNestedWhereQuery.java | 24 +++-
.../query/core/base/BaseWhereQuery.java | 30 +++--
.../xuejike/query/core/base/MapDao.java | 118 ++++++++++++++++++
.../xuejike/query/core/config/DaoFactory.java | 3 +-
.../query/core/criteria/DaoCriteria.java | 9 +-
.../query/core/criteria/GetDaoCriteria.java | 9 ++
.../query/core/criteria/LoadRefCriteria.java | 16 +++
.../query/core/criteria/MapCriteria.java | 9 ++
.../core/criteria/SelectDaoCriteria.java | 26 ++++
.../xuejike/query/core/enums/LoadRefMode.java | 11 ++
.../core/exception/LambdaQueryException.java | 6 +-
.../interceptor/LambdaQueryInterceptor.java | 18 +++
.../github/xuejike/query/core/po/JPage.java | 11 +-
.../xuejike/query/core/po/LoadRefInfo.java | 16 +++
.../xuejike/query/core/tool/ELParseTool.java | 85 +++++++++++++
.../query/core/tool/lambda/LambdaTool.java | 1 +
lambda-query-core/src/test/java/TestMain.java | 56 +++++++++
.../src/test/java/vo/TestVo.java | 20 +++
.../xuejike/query/mongo/MongoDaoFactory.java | 3 +-
.../query/mybatisplus/MyBatisPlusBuilder.java | 16 ++-
.../mybatisplus/MyBatisPlusDaoFactory.java | 3 +-
.../query/mongo/demo/mybatis/entity/U1.java | 1 +
.../xuejike/query/mongo/demo/vo/U1Vo.java | 21 ++++
mongo-demo/src/test/java/MyBatisTest.java | 45 +++++++
mongo-demo/src/test/java/TestMain.java | 3 +-
32 files changed, 612 insertions(+), 40 deletions(-)
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/RefValue.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/SetRefValue.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/criteria/GetDaoCriteria.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/criteria/LoadRefCriteria.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/criteria/MapCriteria.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/criteria/SelectDaoCriteria.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/enums/LoadRefMode.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/interceptor/LambdaQueryInterceptor.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/po/LoadRefInfo.java
create mode 100644 lambda-query-core/src/main/java/com/github/xuejike/query/core/tool/ELParseTool.java
create mode 100644 lambda-query-core/src/test/java/TestMain.java
create mode 100644 lambda-query-core/src/test/java/vo/TestVo.java
create mode 100644 mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/vo/U1Vo.java
create mode 100644 mongo-demo/src/test/java/MyBatisTest.java
diff --git a/README.md b/README.md
index 035c55f..fa3878b 100644
--- a/README.md
+++ b/README.md
@@ -132,7 +132,7 @@ public class TestDoc {
/**
* == 查询
*/
-@Test
+@TestMain
public void testEq(){
List list = JkQuerys.lambdaQuery(TestDoc.class).eq(TestDoc::getName, "name_1").list();
Assertions.assertEquals(list.size(),1);
@@ -144,7 +144,7 @@ public void testEq(){
* 大于号查询
*
*/
-@Test
+@TestMain
public void testGt(){
List list = JkQuerys.lambdaQuery(TestDoc.class).gt(TestDoc::getNum,3 ).list();
Assertions.assertEquals(list.size(),1);
@@ -155,7 +155,7 @@ public void testGt(){
/**
* 大于等于查询
*/
-@Test
+@TestMain
public void testGte(){
List list = JkQuerys.lambdaQuery(TestDoc.class).gte(TestDoc::getNum,4 ).list();
Assertions.assertEquals(list.size(),1);
@@ -166,7 +166,7 @@ public void testGte(){
/**
* 小于号查询
*/
-@Test
+@TestMain
public void testLt(){
List list = JkQuerys.lambdaQuery(TestDoc.class).lt(TestDoc::getNum,1 ).list();
Assertions.assertEquals(list.size(),1);
@@ -177,7 +177,7 @@ public void testLt(){
/**
* 小于等于查询
*/
-@Test
+@TestMain
public void testLte(){
List list = JkQuerys.lambdaQuery(TestDoc.class).lte(TestDoc::getNum,0 ).list();
Assertions.assertEquals(list.size(),1);
@@ -188,7 +188,7 @@ public void testLte(){
/**
* In 查询
*/
-@Test
+@TestMain
public void testIn(){
List list = JkQuerys.lambdaQuery(TestDoc.class)
.in(TestDoc::getTitle,"title_0" ).list();
@@ -200,7 +200,7 @@ public void testIn(){
/**
* NotIn 查询
*/
-@Test
+@TestMain
public void testNotIn(){
List list = JkQuerys.lambdaQuery(TestDoc.class)
.notIn(TestDoc::getTitle,"title_0","title_1","title_2","title_3" ).list();
@@ -212,7 +212,7 @@ public void testNotIn(){
/**
* or 查询
*/
-@Test
+@TestMain
public void testOr(){
List list = JkQuerys.lambdaQuery(TestDoc.class).or().eq(TestDoc::getNum, 0).or().eq(TestDoc::getNum, 1).list();
Assertions.assertEquals(list.size(),2);
@@ -230,7 +230,7 @@ public void testOr(){
/**
* 排序查询
*/
-@Test
+@TestMain
public void testOrder(){
List list = JkQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderAsc(TestDoc::getNum).list();
Assertions.assertEquals(list.size(),2);
@@ -246,7 +246,7 @@ public void testOrder(){
/**
* 二级字段查询
*/
-@Test
+@TestMain
public void testSubField(){
List list = JkQuerys.lambdaQuery(TestDoc.class).eq(of().subList(TestDoc::getToc).sub(TestDoc.Title::getTitle), "sub_title_0_0").list();
Assertions.assertEquals(list.size(),1);
diff --git a/lambda-query-core/pom.xml b/lambda-query-core/pom.xml
index b150836..e2d57a5 100644
--- a/lambda-query-core/pom.xml
+++ b/lambda-query-core/pom.xml
@@ -24,6 +24,11 @@
hutool-log
5.5.2
+
+ cn.hutool
+ hutool-cache
+ 5.5.2
+
com.alibaba
fastjson
@@ -36,7 +41,18 @@
1.18.16
provided
+
+ org.springframework
+ spring-expression
+ 5.2.10.RELEASE
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.7.0
+ test
+
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java
index 2c08f8f..d2a8822 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java
@@ -1,9 +1,9 @@
package com.github.xuejike.query.core;
+import com.github.xuejike.query.core.base.BaseDao;
import com.github.xuejike.query.core.base.BaseNestedWhereQuery;
-import com.github.xuejike.query.core.criteria.DaoCriteria;
-import com.github.xuejike.query.core.criteria.InjectionBaseQuery;
-import com.github.xuejike.query.core.criteria.OrderCriteria;
+import com.github.xuejike.query.core.base.MapDao;
+import com.github.xuejike.query.core.criteria.*;
import com.github.xuejike.query.core.enums.OrderType;
import com.github.xuejike.query.core.po.FieldInfo;
import com.github.xuejike.query.core.tool.lambda.FieldFunction;
@@ -15,12 +15,12 @@
* @author xuejike
* @date 2020/12/18
*/
-public class JkLambdaQuery extends BaseNestedWhereQuery, JkLambdaQuery> implements DaoCriteria , OrderCriteria, JkLambdaQuery> {
- private DaoCriteria daoCriteria;
+public class JkLambdaQuery extends BaseNestedWhereQuery, JkLambdaQuery> implements DaoCriteria , OrderCriteria, JkLambdaQuery>, MapCriteria {
+ private BaseDao daoCriteria;
- public JkLambdaQuery(DaoCriteria daoCriteria) {
+ public JkLambdaQuery(BaseDao daoCriteria) {
this.daoCriteria = daoCriteria;
- if (daoCriteria instanceof InjectionBaseQuery){
+ if (daoCriteria != null){
((InjectionBaseQuery) daoCriteria).injectionBaseWhereQuery(this);
}
}
@@ -48,4 +48,9 @@ public JkLambdaQuery orderDesc(FieldFunction... fields) {
return returnObj;
}
+
+ @Override
+ public SelectDaoCriteria map(Class mapCls) {
+ return new MapDao(daoCriteria,mapCls);
+ }
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkQuerys.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkQuerys.java
index 8ddf317..0713db2 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkQuerys.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkQuerys.java
@@ -2,6 +2,7 @@
import cn.hutool.core.annotation.AnnotationUtil;
import com.github.xuejike.query.core.annotation.DaoSelect;
+import com.github.xuejike.query.core.base.BaseDao;
import com.github.xuejike.query.core.config.DaoFactory;
import com.github.xuejike.query.core.config.JkQueryConfig;
import com.github.xuejike.query.core.criteria.DaoCriteria;
@@ -18,7 +19,7 @@ public static JkLambdaQuery lambdaQuery(Class entityCls){
for (DaoFactory factory : instance.getDaoFactoryList()) {
DaoSelect annotation = AnnotationUtil.getAnnotation(entityCls, DaoSelect.class);
if (factory.getDaoCls() == annotation.daoCls()){
- DaoCriteria daoCriteria = factory.createDao(entityCls);
+ BaseDao daoCriteria = factory.createDao(entityCls);
return new JkLambdaQuery<>(daoCriteria);
}
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/RefValue.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/RefValue.java
new file mode 100644
index 0000000..9a437d1
--- /dev/null
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/RefValue.java
@@ -0,0 +1,16 @@
+package com.github.xuejike.query.core.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author xuejike
+ * @date 2020/12/31
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RefValue {
+ String value();
+}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/SetRefValue.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/SetRefValue.java
new file mode 100644
index 0000000..e5922dc
--- /dev/null
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/annotation/SetRefValue.java
@@ -0,0 +1,16 @@
+package com.github.xuejike.query.core.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author xuejike
+ * @date 2020/12/31
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface SetRefValue {
+ String value();
+}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java
index 4a14e3f..dcc27e8 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java
@@ -24,4 +24,6 @@ public DaoCriteria getDao() {
public void injectionBaseWhereQuery(BaseWhereQuery baseWhereQuery) {
this.baseWhereQuery = baseWhereQuery;
}
+
+
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseNestedWhereQuery.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseNestedWhereQuery.java
index c329f0e..07d3a2d 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseNestedWhereQuery.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseNestedWhereQuery.java
@@ -1,12 +1,22 @@
package com.github.xuejike.query.core.base;
+import com.github.xuejike.query.core.criteria.DaoCriteria;
+import com.github.xuejike.query.core.criteria.LoadRefCriteria;
+import com.github.xuejike.query.core.criteria.MapCriteria;
+import com.github.xuejike.query.core.criteria.SelectDaoCriteria;
+import com.github.xuejike.query.core.enums.LoadRefMode;
+import com.github.xuejike.query.core.po.FieldInfo;
+import com.github.xuejike.query.core.po.LoadRefInfo;
+import com.github.xuejike.query.core.tool.lambda.FieldFunction;
+import com.github.xuejike.query.core.tool.lambda.LambdaTool;
+
import java.util.function.Consumer;
/**
* @author xuejike
* @date 2020/12/18
*/
-public class BaseNestedWhereQuery> extends BaseSimpleWhereQuery{
+public class BaseNestedWhereQuery> extends BaseSimpleWhereQuery implements LoadRefCriteria{
public BaseNestedWhereQuery() {
@@ -24,4 +34,16 @@ public > C or(Consumer C loadRef(F refField, Class entityCls, FieldFunction targetField, LoadRefMode mode) {
+ LoadRefInfo info = new LoadRefInfo<>();
+ info.setRefClass(entityCls);
+ info.setMode(mode);
+ info.setTargetField(buildFieldInfo(targetField));
+ refClassMap.put(buildFieldInfo(refField),info);
+ return returnObj;
+ }
+
+
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseWhereQuery.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseWhereQuery.java
index 4ff18cc..efef203 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseWhereQuery.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseWhereQuery.java
@@ -23,11 +23,13 @@
*/
public class BaseWhereQuery> implements WhereCriteria,SelectCriteria{
- protected Map
diff --git a/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDao.java b/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDao.java
index 49bf06f..af7c979 100644
--- a/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDao.java
+++ b/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDao.java
@@ -39,36 +39,67 @@ public MongoDao(MongoTemplate mongoTemplate, Class entityCls) {
private Query buildQuery(){
- Query builder = MongoQueryBuilder.builder(baseWhereQuery.buildQueryInfo());
+ Query builder = new Query();
+ if (baseConditionsVo != null){
+ MongoQueryBuilder.builder(builder,baseConditionsVo.getWhere());
+ if (CollUtil.isNotEmpty(baseConditionsVo.getSelectList())){
+ List list = baseConditionsVo.getSelectList();
+ builderSelectedField(builder, list);
+ }
+ if (CollUtil.isNotEmpty(baseConditionsVo.getExcludeList())){
+ List list = baseConditionsVo.getExcludeList();
+ builderExclude(builder, list);
+ }
+ if (CollUtil.isNotEmpty(baseConditionsVo.getOrderMap())){
+ Map orderMap = baseConditionsVo.getOrderMap();
+ builderOrder(builder, orderMap);
+ }
+ }
+ MongoQueryBuilder.builder(builder,baseWhereQuery.buildQueryInfo());
+
+
if (CollUtil.isNotEmpty(baseWhereQuery.getSelectList())){
- Field fields = builder.fields();
List list = baseWhereQuery.getSelectList();
- for (FieldInfo info : list) {
- fields.include(MongoQueryBuilder.buildField(info));
- }
+ builderSelectedField(builder,list);
}
if (CollUtil.isNotEmpty(baseWhereQuery.getExcludeList())){
- Field fields = builder.fields();
List list = baseWhereQuery.getExcludeList();
- for (FieldInfo info : list) {
- fields.exclude(MongoQueryBuilder.buildField(info));
- }
+ builderExclude(builder, list);
}
if (CollUtil.isNotEmpty(baseWhereQuery.getOrderMap())){
Map orderMap = baseWhereQuery.getOrderMap();
- List orderList = orderMap.entrySet().stream().map(it -> {
- if (it.getValue() == OrderType.desc) {
- return Sort.Order.desc(MongoQueryBuilder.buildField(it.getKey()));
- } else {
- return Sort.Order.asc(MongoQueryBuilder.buildField(it.getKey()));
- }
- }).collect(Collectors.toList());
- builder.with(Sort.by(orderList));
+ builderOrder(builder, orderMap);
}
return builder;
}
+ private void builderOrder(Query builder, Map orderMap) {
+ List orderList = orderMap.entrySet().stream().map(it -> {
+ if (it.getValue() == OrderType.desc) {
+ return Sort.Order.desc(MongoQueryBuilder.buildField(it.getKey()));
+ } else {
+ return Sort.Order.asc(MongoQueryBuilder.buildField(it.getKey()));
+ }
+ }).collect(Collectors.toList());
+ builder.with(Sort.by(orderList));
+ }
+
+ private void builderExclude(Query builder, List list) {
+ Field fields = builder.fields();
+ for (FieldInfo info : list) {
+ fields.exclude(MongoQueryBuilder.buildField(info));
+ }
+ }
+
+ private void builderSelectedField(Query builder, List list) {
+ Field fields = builder.fields();
+
+ for (FieldInfo info : list) {
+ fields.include(MongoQueryBuilder.buildField(info));
+ }
+ }
+
@Override
public DaoCriteria getDao() {
return this;
@@ -90,11 +121,8 @@ public T getFirst() {
@Override
public List list() {
- if (baseWhereQuery.isEmpty()){
- return mongoTemplate.findAll(entityCls);
- }else{
- return mongoTemplate.find(buildQuery(),entityCls);
- }
+ return mongoTemplate.find(buildQuery(),entityCls);
+
}
@Override
diff --git a/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDaoFactory.java b/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDaoFactory.java
index 99a00bd..16ed9a5 100644
--- a/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDaoFactory.java
+++ b/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoDaoFactory.java
@@ -20,10 +20,7 @@ public class MongoDaoFactory extends DaoFactory {
public MongoDaoFactory(MongoTemplate mongoTemplate) {
super(MongoDao.class);
this.mongoTemplate = mongoTemplate;
- init();
- }
- public void init(){
- JkQueryConfig.getInstance().addDaoFactory(this);
+
}
diff --git a/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoQueryBuilder.java b/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoQueryBuilder.java
index 14010f7..5f243ec 100644
--- a/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoQueryBuilder.java
+++ b/lambda-query-mongo/src/main/java/com/github/xuejike/query/mongo/MongoQueryBuilder.java
@@ -23,6 +23,12 @@ public class MongoQueryBuilder {
public static Query builder(QueryInfo queryInfo) {
Query query = new Query();
+ builder(query,queryInfo);
+
+ return query;
+ }
+
+ public static void builder( Query query,QueryInfo queryInfo) {
List and = queryInfo.getAnd();
for (QueryItem item : and) {
Criteria where = Criteria.where(buildField(item.getField()));
@@ -35,8 +41,6 @@ public static Query builder(QueryInfo queryInfo) {
query.addCriteria(criteria.orOperator(criteriaArray));
}
-
- return query;
}
diff --git a/lambda-query-mybatis-plus/pom.xml b/lambda-query-mybatis-plus/pom.xml
index 12a654b..8c99bd7 100644
--- a/lambda-query-mybatis-plus/pom.xml
+++ b/lambda-query-mybatis-plus/pom.xml
@@ -37,7 +37,8 @@
cn.hutool
hutool-extra
- 5.5.2
+ ${hutool.version}
+
\ No newline at end of file
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
index c3816d7..8401cd0 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
@@ -19,12 +19,12 @@ public class MyBatisPlusBuilder {
public static QueryWrapper build(QueryInfo queryInfo ){
QueryWrapper queryWrapper = new QueryWrapper<>();
- buildOrQuery(queryWrapper,queryInfo);
+ build(queryWrapper,queryInfo);
return queryWrapper;
}
- private static void buildOrQuery(QueryWrapper queryWrapper,QueryInfo info){
+ public static void build(QueryWrapper queryWrapper,QueryInfo info){
for (QueryItem item : info.getAnd()) {
buildField(queryWrapper,item);
}
@@ -32,7 +32,7 @@ private static void buildOrQuery(QueryWrapper queryWrapper,QueryInfo info)
for (QueryInfo queryInfo : info.getOr()) {
if (CollUtil.isNotEmpty(queryInfo.getOr()) || CollUtil.isNotEmpty(queryInfo.getAnd())){
queryWrapper.or(or->{
- buildOrQuery(or,queryInfo);
+ build(or,queryInfo);
});
}
}
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
index dba8a6e..5e5ac44 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
@@ -30,8 +30,28 @@ public MyBatisPlusDao(BaseMapper baseMapper, Class entityCls) {
}
protected QueryWrapper buildQuery(){
+ QueryWrapper build = new QueryWrapper<>();
+
+ if (baseConditionsVo != null){
+ MyBatisPlusBuilder.build(build,baseConditionsVo.getWhere());
+ if (CollUtil.isNotEmpty(baseConditionsVo.getSelectList())){
+ List selectList = baseConditionsVo.getSelectList();
+ build.select(selectList.stream().map(MyBatisPlusBuilder::buildField).toArray(String[]::new));
+ }
+ if (CollUtil.isNotEmpty(baseConditionsVo.getOrderMap())){
+ Map orderMap = baseConditionsVo.getOrderMap();
+ orderMap.entrySet().forEach(it->{
+ if (it.getValue() == OrderType.desc){
+ build.orderByDesc(MyBatisPlusBuilder.buildField(it.getKey()));
+ }else{
+ build.orderByAsc(MyBatisPlusBuilder.buildField(it.getKey()));
+ }
+ });
+ }
+ }
+
QueryInfo queryInfo = baseWhereQuery.buildQueryInfo();
- QueryWrapper build = MyBatisPlusBuilder.build(queryInfo);
+ MyBatisPlusBuilder.build(build,queryInfo);
if (CollUtil.isNotEmpty(baseWhereQuery.getSelectList())){
List selectList = baseWhereQuery.getSelectList();
build.select(selectList.stream().map(MyBatisPlusBuilder::buildField).toArray(String[]::new));
@@ -42,7 +62,7 @@ protected QueryWrapper buildQuery(){
}
if (CollUtil.isNotEmpty(baseWhereQuery.getOrderMap())){
Map orderMap = baseWhereQuery.getOrderMap();
- orderMap.entrySet().stream().forEach(it->{
+ orderMap.entrySet().forEach(it->{
if (it.getValue() == OrderType.desc){
build.orderByDesc(MyBatisPlusBuilder.buildField(it.getKey()));
}else{
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDaoFactory.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDaoFactory.java
index 8517fbc..1ba9a85 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDaoFactory.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDaoFactory.java
@@ -25,13 +25,9 @@ public class MyBatisPlusDaoFactory extends DaoFactory {
public MyBatisPlusDaoFactory(Collection mapperList) {
super(MyBatisPlusDao.class);
this.mapperList = CollUtil.newArrayList(mapperList);
- init();
- }
- public void init(){
- JkQueryConfig.getInstance().addDaoFactory(this);
- }
+ }
@Override
public BaseDao createDao(Class entityCls) {
diff --git a/mongo-demo/pom.xml b/mongo-demo/pom.xml
index 9cd1c52..a2453e3 100644
--- a/mongo-demo/pom.xml
+++ b/mongo-demo/pom.xml
@@ -55,9 +55,20 @@
com.github.xuejike
- lambda-query-mybatis-plus
+ lambda-query-mybatis-plus-starter
${query.version}
+
+ com.github.xuejike
+ lambda-query-http
+ ${query.version}
+
+
+ com.github.xuejike
+ lambda-query-http-starter
+ ${query.version}
+
+
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java
index dc30025..e89f5ca 100644
--- a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java
@@ -11,7 +11,7 @@
*/
@SpringBootApplication
@MapperScan("com.github.xuejike.query.mongo.demo.mybatis.mapper")
-@ComponentScan(basePackages={"cn.hutool.extra.spring"})
+@ComponentScan(basePackages={"cn.hutool.extra.spring","com.github.xuejike"})
public class App {
public static void main(String[] args) {
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/controller/HttpTestController.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/controller/HttpTestController.java
new file mode 100644
index 0000000..289341a
--- /dev/null
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/controller/HttpTestController.java
@@ -0,0 +1,42 @@
+package com.github.xuejike.query.mongo.demo.controller;
+
+import com.github.xuejike.query.core.JkLambdaQuery;
+import com.github.xuejike.query.core.JkQuerys;
+import com.github.xuejike.query.http.LambdaQueryHttpConfig;
+import com.github.xuejike.query.http.client.HttpClientFactory;
+import com.github.xuejike.query.http.server.starter.HttpServiceConfig;
+import com.github.xuejike.query.mongo.demo.http.HttpEntity;
+import com.github.xuejike.query.mongo.demo.mybatis.entity.U1;
+import com.github.xuejike.query.mongo.demo.mybatis.entity.U2;
+import com.github.xuejike.query.mongo.demo.vo.U1Vo;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+/**
+ * @author xuejike
+ * @date 2021/1/4
+ */
+@RestController
+@RequestMapping("/")
+public class HttpTestController {
+ static {
+
+ }
+ @PostConstruct
+ public void init(){
+ LambdaQueryHttpConfig.getInstance().registerService("u1", U1.class);
+ HttpClientFactory httpClientFactory = new HttpClientFactory();
+ }
+ @GetMapping("list")
+ public Object testList(){
+ JkLambdaQuery query = JkQuerys.lambdaQuery(HttpEntity.class);
+ Object list = query.or().eq(HttpEntity::getName,"name1").or()
+ .eq(HttpEntity::getName,"name2")
+ .loadRef(HttpEntity::getU2Id, U2.class,U2::getId).map(U1Vo.class).list();
+ return list;
+ }
+}
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/http/HttpEntity.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/http/HttpEntity.java
new file mode 100644
index 0000000..5271454
--- /dev/null
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/http/HttpEntity.java
@@ -0,0 +1,17 @@
+package com.github.xuejike.query.mongo.demo.http;
+
+import com.github.xuejike.query.http.annotation.HttpDaoSelect;
+import lombok.Data;
+
+/**
+ * @author xuejike
+ * @date 2021/1/4
+ */
+@HttpDaoSelect( serverAddress = "http://127.0.0.1:7000/lambda/u1/")
+@Data
+public class HttpEntity {
+ private Long id;
+ private String name;
+ private String type;
+ private Long u2Id;
+}
diff --git a/mongo-demo/src/main/resources/application.yaml b/mongo-demo/src/main/resources/application.yaml
index ffa1ad3..37de63f 100644
--- a/mongo-demo/src/main/resources/application.yaml
+++ b/mongo-demo/src/main/resources/application.yaml
@@ -16,5 +16,5 @@ logging:
com.github.xuejike.query.mongo.demo.mybatis.mapper: debug
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(-%5p) %clr(${PID:- }){magenta} --- %clr([%15.15t]){faint} %highlight(%-80.80logger{300}){cyan} %clr(:) %m %n%wEx"
-
-
+server:
+ port: 7000
diff --git a/mongo-demo/src/test/java/HttpClientTest.java b/mongo-demo/src/test/java/HttpClientTest.java
new file mode 100644
index 0000000..52c5a2a
--- /dev/null
+++ b/mongo-demo/src/test/java/HttpClientTest.java
@@ -0,0 +1,41 @@
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.xuejike.query.core.JkQuerys;
+import com.github.xuejike.query.http.client.HttpClientFactory;
+import com.github.xuejike.query.mongo.demo.App;
+import com.github.xuejike.query.mongo.demo.mybatis.entity.U1;
+import com.github.xuejike.query.mongo.demo.mybatis.entity.U2;
+import com.github.xuejike.query.mongo.demo.vo.U1Vo;
+import com.github.xuejike.query.mybatisplus.MyBatisPlusDaoFactory;
+import http.HttpRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.test.context.ContextConfiguration;
+
+import java.util.List;
+
+/**
+ * @author xuejike
+ * @date 2020/12/31
+ */
+@SpringBootTest(classes = App.class)
+@ContextConfiguration
+@Slf4j
+@Rollback(value = false)
+public class HttpClientTest {
+
+ @BeforeEach
+ public void before(){
+ new HttpClientFactory();
+
+ }
+
+ @Test
+ public void list(){
+ JkQuerys.lambdaQuery(HttpRequest.class).eq(HttpRequest::getName,"xxx").eq(HttpRequest::getUserName,"un").list();
+ }
+}
diff --git a/mongo-demo/src/test/java/TestMain.java b/mongo-demo/src/test/java/TestMain.java
index 4ab5692..0f44082 100644
--- a/mongo-demo/src/test/java/TestMain.java
+++ b/mongo-demo/src/test/java/TestMain.java
@@ -47,8 +47,7 @@ public class TestMain {
@Autowired
MongoTemplate mongoTemplate;
- @Autowired
- U1Mapper u1Mapper;
+
@BeforeEach
public void before(){
new MyBatisPlusDaoFactory(SpringUtil.getBeansOfType(BaseMapper.class).values());
@@ -226,7 +225,7 @@ public void testAddU1(){
U1 u1 = new U1();
u1.setType("555");
u1.setName("name2");
- u1Mapper.insert(u1);
+
}
@Test
@@ -235,8 +234,7 @@ public void queryU1(){
.eq(U1::getId, 1)
.or().eq(U1::getId,2)
.or(or->
- or.eq(U1::getId,1)
- .eq(U1::getName,"name1").eq(U1::getName,"666")
+ or.eq(U1::getId,1).eq(U1::getName,"name1").eq(U1::getName,"666")
)
.list();
System.out.println(JSON.toJSONString(list));
diff --git a/mongo-demo/src/test/java/http/HttpRequest.java b/mongo-demo/src/test/java/http/HttpRequest.java
new file mode 100644
index 0000000..4469d32
--- /dev/null
+++ b/mongo-demo/src/test/java/http/HttpRequest.java
@@ -0,0 +1,17 @@
+package http;
+
+import com.github.xuejike.query.http.annotation.HttpDaoSelect;
+import lombok.Data;
+
+/**
+ * @author xuejike
+ * @date 2020/12/31
+ */
+@HttpDaoSelect
+@Data
+public class HttpRequest {
+ private Long id;
+ private String name;
+ private String type;
+ private String userName;
+}
diff --git a/pom.xml b/pom.xml
index a202e48..65efa32 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,8 @@
mongo-demo
lambda-query-mongo-starter
lambda-query-mybatis-plus-starter
+ lambda-query-http
+ lambda-query-http-starter
1.8
@@ -47,12 +49,23 @@
1.8
1.0.2-SNAPSHOT
UTF-8
-
+ 5.5.2
-
+
+ org.slf4j
+ slf4j-api
+ 1.7.30
+ compile
+
+
+ org.projectlombok
+ lombok
+ 1.18.16
+ provided
+
From 7602ae28cae95394f53fc246d89c986d5715e5da Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Mon, 4 Jan 2021 14:31:48 +0800
Subject: [PATCH 05/17] =?UTF-8?q?=E6=94=AF=E6=8C=81http=20=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lambda-query-http-starter/pom.xml | 2 +-
.../query/http/server/starter/AutoConfig.java | 19 ++++++++++-
.../http/server/starter/HttpClientConfig.java | 10 ------
.../http/server/starter/LbHttpClient.java | 32 +++++++++++++++++++
.../http/server/starter/ServiceSelect.java | 6 +++-
.../query/http/LambdaQueryHttpConfig.java | 4 +++
.../query/http/annotation/HttpDaoSelect.java | 3 +-
.../query/http/client/HttpClientDao.java | 2 +-
.../query/http/client/HuToolHttpClient.java | 12 +++++--
mongo-demo/pom.xml | 25 ++++++++++++++-
.../github/xuejike/query/mongo/demo/App.java | 2 +-
.../query/mongo/demo/http/HttpEntity.java | 2 +-
.../src/main/resources/application.yaml | 1 +
mongo-demo/src/test/java/TestNoSpring.java | 2 +-
14 files changed, 100 insertions(+), 22 deletions(-)
delete mode 100644 lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpClientConfig.java
create mode 100644 lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/LbHttpClient.java
diff --git a/lambda-query-http-starter/pom.xml b/lambda-query-http-starter/pom.xml
index 135f9bc..4c803c1 100644
--- a/lambda-query-http-starter/pom.xml
+++ b/lambda-query-http-starter/pom.xml
@@ -32,7 +32,7 @@
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
- 2.2.2.RELEASE
+ 2.2.6.RELEASE
compile
diff --git a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java
index 804d613..757da12 100644
--- a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java
+++ b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java
@@ -1,5 +1,9 @@
package com.github.xuejike.query.http.server.starter;
+import com.github.xuejike.query.http.LambdaQueryHttpConfig;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -8,6 +12,19 @@
* @date 2021/1/4
*/
@Configuration
-@Import({HttpServiceConfig.class,HttpClientConfig.class})
+@Import({HttpServiceConfig.class})
public class AutoConfig {
+ @Bean
+ @ConditionalOnBean(ServiceInstanceChooser.class)
+ public ServiceSelect serviceSelect(ServiceInstanceChooser loadBalancer){
+ return new ServiceSelect(loadBalancer);
+ }
+ @Bean
+ @ConditionalOnBean(ServiceSelect.class)
+ public LbHttpClient lbHttpClient(ServiceSelect serviceSelect){
+ LbHttpClient lbHttpClient = new LbHttpClient(serviceSelect);
+ LambdaQueryHttpConfig.getInstance().setHttpClient(lbHttpClient);
+ return lbHttpClient;
+ }
+
}
diff --git a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpClientConfig.java b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpClientConfig.java
deleted file mode 100644
index bc1f5c7..0000000
--- a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpClientConfig.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.github.xuejike.query.http.server.starter;
-
-/**
- * @author xuejike
- * @date 2021/1/4
- */
-
-public class HttpClientConfig {
-
-}
diff --git a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/LbHttpClient.java b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/LbHttpClient.java
new file mode 100644
index 0000000..5953f97
--- /dev/null
+++ b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/LbHttpClient.java
@@ -0,0 +1,32 @@
+package com.github.xuejike.query.http.server.starter;
+
+import cn.hutool.core.collection.CollUtil;
+import com.github.xuejike.query.http.client.HuToolHttpClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * @author xuejike
+ * @date 2021/1/4
+ */
+
+public class LbHttpClient extends HuToolHttpClient {
+ ServiceSelect serviceSelect;
+
+ public LbHttpClient(ServiceSelect serviceSelect) {
+ this.serviceSelect = serviceSelect;
+ }
+
+ @Override
+ public String post(String url, Map param, String body) {
+
+
+ URI uri = serviceSelect.selectUrl(url);
+ return super.post(uri.toString(), param, body);
+ }
+}
diff --git a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/ServiceSelect.java b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/ServiceSelect.java
index 72f7d18..c9e5b0b 100644
--- a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/ServiceSelect.java
+++ b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/ServiceSelect.java
@@ -16,9 +16,13 @@
*/
@Slf4j
public class ServiceSelect {
- @Autowired
+
ServiceInstanceChooser loadBalancer;
+ public ServiceSelect(ServiceInstanceChooser loadBalancer) {
+ this.loadBalancer = loadBalancer;
+ }
+
public URI selectUrl(String authUrl) {
URI uri = URLUtil.toURI(authUrl);
if ("lb".equals(uri.getScheme())){
diff --git a/lambda-query-http/src/main/java/com/github/xuejike/query/http/LambdaQueryHttpConfig.java b/lambda-query-http/src/main/java/com/github/xuejike/query/http/LambdaQueryHttpConfig.java
index 6dce8f3..b11e2b7 100644
--- a/lambda-query-http/src/main/java/com/github/xuejike/query/http/LambdaQueryHttpConfig.java
+++ b/lambda-query-http/src/main/java/com/github/xuejike/query/http/LambdaQueryHttpConfig.java
@@ -32,6 +32,10 @@ public HttpClient getHttpClient() {
return httpClient;
}
+ public void setHttpClient(HttpClient httpClient) {
+ this.httpClient = httpClient;
+ }
+
public String getServerBasePath() {
return serverBasePath;
}
diff --git a/lambda-query-http/src/main/java/com/github/xuejike/query/http/annotation/HttpDaoSelect.java b/lambda-query-http/src/main/java/com/github/xuejike/query/http/annotation/HttpDaoSelect.java
index c27b651..21d04e2 100644
--- a/lambda-query-http/src/main/java/com/github/xuejike/query/http/annotation/HttpDaoSelect.java
+++ b/lambda-query-http/src/main/java/com/github/xuejike/query/http/annotation/HttpDaoSelect.java
@@ -16,6 +16,7 @@
@Retention(RetentionPolicy.RUNTIME)
@DaoSelect(daoCls = HttpClientDao.class)
public @interface HttpDaoSelect {
- String serviceName() default "";
+ String path() default "";
String serverAddress() default "";
+
}
diff --git a/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HttpClientDao.java b/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HttpClientDao.java
index 7eb245a..7b6fe34 100644
--- a/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HttpClientDao.java
+++ b/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HttpClientDao.java
@@ -28,7 +28,7 @@ public class HttpClientDao extends BaseDao {
public HttpClientDao(Class entityCls) {
super(entityCls);
HttpDaoSelect daoSelect = AnnotationUtil.getAnnotation(entityCls, HttpDaoSelect.class);
- server = daoSelect.serverAddress();
+ server = daoSelect.serverAddress()+"/"+daoSelect.path();
}
diff --git a/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HuToolHttpClient.java b/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HuToolHttpClient.java
index 6518f83..b8cea8a 100644
--- a/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HuToolHttpClient.java
+++ b/lambda-query-http/src/main/java/com/github/xuejike/query/http/client/HuToolHttpClient.java
@@ -1,5 +1,6 @@
package com.github.xuejike.query.http.client;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
@@ -7,6 +8,7 @@
import java.net.URI;
import java.util.Map;
+import java.util.Optional;
/**
* @author xuejike
@@ -17,10 +19,14 @@
public class HuToolHttpClient implements HttpClient{
@Override
public String post(String url, Map param, String body) {
- URI uri = URLUtil.toURI(url);
+ StringBuilder urlBuilder = new StringBuilder(url).append("?");
+ Optional.ofNullable(param).filter(CollUtil::isNotEmpty).flatMap(it->{
+ it.forEach((key, value) -> urlBuilder.append(key).append("=").append(value));
+ return Optional.empty();
+ });
+ URI uri = URLUtil.toURI(urlBuilder.toString());
String newUrl = uri.normalize().toString();
- log.info("http -> {} ", newUrl);
- log.info(" param->{} ", JSON.toJSONString(param));
+ log.info("http POST -> {} ", newUrl);
log.info(" body->{} ",body);
String post = HttpUtil.post(newUrl, body);
return post;
diff --git a/mongo-demo/pom.xml b/mongo-demo/pom.xml
index a2453e3..ab2e279 100644
--- a/mongo-demo/pom.xml
+++ b/mongo-demo/pom.xml
@@ -12,6 +12,10 @@
mongo-demo
+
+ 2.2.1.RELEASE
+ Hoxton.SR8
+
@@ -67,8 +71,8 @@
com.github.xuejike
lambda-query-http-starter
${query.version}
-
+
@@ -79,6 +83,25 @@
pom
import
+
+ org.springframework.cloud
+ spring-cloud-starter
+ ${spring-cloud-alibaba.version}
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring-cloud-alibaba.version}
+ pom
+ import
+
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java
index e89f5ca..c9731ac 100644
--- a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/App.java
@@ -11,7 +11,7 @@
*/
@SpringBootApplication
@MapperScan("com.github.xuejike.query.mongo.demo.mybatis.mapper")
-@ComponentScan(basePackages={"cn.hutool.extra.spring","com.github.xuejike"})
+@ComponentScan(basePackages={"cn.hutool.extra.spring","com.github.xuejike.query.mongo.demo"})
public class App {
public static void main(String[] args) {
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/http/HttpEntity.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/http/HttpEntity.java
index 5271454..ae3df76 100644
--- a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/http/HttpEntity.java
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/http/HttpEntity.java
@@ -7,7 +7,7 @@
* @author xuejike
* @date 2021/1/4
*/
-@HttpDaoSelect( serverAddress = "http://127.0.0.1:7000/lambda/u1/")
+@HttpDaoSelect( serverAddress = "http://127.0.0.1:7000",path = "/lambda/u1/")
@Data
public class HttpEntity {
private Long id;
diff --git a/mongo-demo/src/main/resources/application.yaml b/mongo-demo/src/main/resources/application.yaml
index 37de63f..3eae0de 100644
--- a/mongo-demo/src/main/resources/application.yaml
+++ b/mongo-demo/src/main/resources/application.yaml
@@ -18,3 +18,4 @@ logging:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(-%5p) %clr(${PID:- }){magenta} --- %clr([%15.15t]){faint} %highlight(%-80.80logger{300}){cyan} %clr(:) %m %n%wEx"
server:
port: 7000
+debug: true
\ No newline at end of file
diff --git a/mongo-demo/src/test/java/TestNoSpring.java b/mongo-demo/src/test/java/TestNoSpring.java
index c617969..293043e 100644
--- a/mongo-demo/src/test/java/TestNoSpring.java
+++ b/mongo-demo/src/test/java/TestNoSpring.java
@@ -18,7 +18,7 @@ public class TestNoSpring {
@Test
public void test(){
- JkLambdaQuery query = JkQuerys.lambdaQuery(TestDoc.class);
+ JkLambdaQuery query = JkQuerys.lambdaQuery(TestDoc.class);
List list = query.eq(TestDoc::getId, "666").list();
}
From e75d7cc15f5513206229f6b189aac885b0df4c31 Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Mon, 4 Jan 2021 16:26:22 +0800
Subject: [PATCH 06/17] =?UTF-8?q?=E8=80=97=E6=97=B6=E7=BB=9F=E8=AE=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../xuejike/query/core/base/MapDao.java | 30 ++++++++++-------
lambda-query-http-starter/pom.xml | 1 -
.../query/http/server/starter/AutoConfig.java | 6 ++++
.../server/starter/HttpServiceConfig.java | 27 +++++++++++-----
.../server/starter/JkQueryHttpProperties.java | 2 +-
.../query/mybatisplus/MyBatisPlusBuilder.java | 32 ++++++++++++++++---
.../query/mybatisplus/MyBatisPlusDao.java | 12 +++----
7 files changed, 78 insertions(+), 32 deletions(-)
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
index 70765e8..70ad595 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
@@ -13,6 +13,7 @@
import com.github.xuejike.query.core.po.LoadRefInfo;
import com.github.xuejike.query.core.tool.ELParseTool;
import com.github.xuejike.query.core.tool.lambda.CascadeField;
+import lombok.extern.slf4j.Slf4j;
import java.io.Serializable;
import java.lang.reflect.Field;
@@ -23,6 +24,7 @@
* @author xuejike
* @date 2020/12/31
*/
+@Slf4j
public class MapDao implements SelectDaoCriteria, GetDaoCriteria {
private BaseDao daoCriteria;
@@ -48,25 +50,28 @@ public List list() {
private List loadRefMap(List list) {
Map> refClassMap = daoCriteria.getRefClassMap();
- HashMap> refMap = new HashMap<>(refClassMap.size());
- for (Map.Entry> entry : refClassMap.entrySet()) {
+ log.debug("loadRefMap 耗时统计:加载引用对象{}:",refClassMap.size());
+ long begin = System.currentTimeMillis();
+ Map> refMap = refClassMap.entrySet().parallelStream().collect(Collectors
+ .toMap(it -> it.getKey().getField(), entry -> {
Set refIdList = list.stream().map(it -> ReflectUtil.getFieldValue(it, entry.getKey().getField())).collect(Collectors.toSet());
List> refList = JkQuerys.lambdaQuery(entry.getValue().getRefClass())
.in(new CascadeField().subFieldName(entry.getValue().getTargetField().getField()), refIdList)
.list();
Map map = refList.stream().collect(Collectors.toMap(it -> ReflectUtil.getFieldValue(it, entry.getValue().getTargetField().getField()), it -> it));
- refMap.put(entry.getKey().getField(),map);
- }
-
-
+ log.debug("loadRefMap 耗时统计:关联属性{},加载耗时:{}",entry.getKey().getField(),System.currentTimeMillis()-begin);
+ return map;
+ }));
+ log.debug("loadRefMap 耗时统计:关联属性加载总耗时:{}",System.currentTimeMillis()-begin);
+ long elBegin = System.currentTimeMillis();
List collect = list.parallelStream().map(item -> {
R r = BeanUtil.copyProperties(item, resultCls);
-
- Map varMap = refMap.entrySet().parallelStream()
- .collect(Collectors.toMap(
- entry -> ELParseTool.getSetRefValue(resultCls, entry.getKey()),
- entry -> entry.getValue().get(ReflectUtil.getFieldValue(item, entry.getKey()))));
-
+ HashMap varMap = new HashMap<>();
+ for (Map.Entry> entry : refMap.entrySet()) {
+ String varName = ELParseTool.getSetRefValue(resultCls, entry.getKey());
+ Object varValue = entry.getValue().get(ReflectUtil.getFieldValue(item, entry.getKey()));
+ varMap.put(varName,varValue);
+ }
Map fieldStringMap = ELParseTool.getRefValues(resultCls);
fieldStringMap.entrySet().parallelStream().forEach(entry -> {
ReflectUtil.setFieldValue(r, entry.getKey(), ELParseTool.parseEl(entry.getValue(), varMap, entry.getKey().getType()));
@@ -74,6 +79,7 @@ private List loadRefMap(List list) {
return r;
}).collect(Collectors.toList());
+ log.debug("loadRefMap 耗时统计:合并数据总耗时:{}",System.currentTimeMillis()-elBegin);
return collect;
}
diff --git a/lambda-query-http-starter/pom.xml b/lambda-query-http-starter/pom.xml
index 4c803c1..14bd98b 100644
--- a/lambda-query-http-starter/pom.xml
+++ b/lambda-query-http-starter/pom.xml
@@ -45,7 +45,6 @@
com.github.xuejike
lambda-query-http
${query.version}
- compile
\ No newline at end of file
diff --git a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java
index 757da12..ec10ea1 100644
--- a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java
+++ b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/AutoConfig.java
@@ -1,6 +1,7 @@
package com.github.xuejike.query.http.server.starter;
import com.github.xuejike.query.http.LambdaQueryHttpConfig;
+import com.github.xuejike.query.http.client.HttpClientFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser;
import org.springframework.context.annotation.Bean;
@@ -14,6 +15,7 @@
@Configuration
@Import({HttpServiceConfig.class})
public class AutoConfig {
+
@Bean
@ConditionalOnBean(ServiceInstanceChooser.class)
public ServiceSelect serviceSelect(ServiceInstanceChooser loadBalancer){
@@ -26,5 +28,9 @@ public LbHttpClient lbHttpClient(ServiceSelect serviceSelect){
LambdaQueryHttpConfig.getInstance().setHttpClient(lbHttpClient);
return lbHttpClient;
}
+ @Bean
+ public HttpClientFactory httpClientFactory(){
+ return new HttpClientFactory();
+ }
}
diff --git a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpServiceConfig.java b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpServiceConfig.java
index 774f91d..c06dd1f 100644
--- a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpServiceConfig.java
+++ b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/HttpServiceConfig.java
@@ -1,7 +1,7 @@
package com.github.xuejike.query.http.server.starter;
import cn.hutool.core.convert.Convert;
-import cn.hutool.core.util.BooleanUtil;
+import com.alibaba.fastjson.JSON;
import com.github.xuejike.query.core.po.JPage;
import com.github.xuejike.query.http.LambdaQueryHttpConfig;
import com.github.xuejike.query.http.service.HttpServiceParse;
@@ -11,11 +11,15 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
-import org.springframework.web.servlet.function.*;
+import org.springframework.web.servlet.function.RouterFunction;
+import org.springframework.web.servlet.function.RouterFunctions;
+import org.springframework.web.servlet.function.ServerRequest;
+import org.springframework.web.servlet.function.ServerResponse;
import javax.annotation.PostConstruct;
+import javax.servlet.ServletException;
+import java.io.IOException;
import java.util.List;
-import java.util.Optional;
/**
* @author xuejike
@@ -38,28 +42,28 @@ public RouterFunction initServer(){
lambdaPath = properties.getHttpServicePath();
route.POST(lambdaPath + "/{service}/list", serverRequest -> {
String serviceName = serverRequest.pathVariable("service");
- HttpBodyVo body = serverRequest.body(HttpBodyVo.class);
+ HttpBodyVo body = readBody(serverRequest);
HttpServiceParse serviceParse = new HttpServiceParse(serviceName, body);
List list = serviceParse.list();
return ServerResponse.accepted().body(list);
});
route.POST(lambdaPath + "/{service}/first", serverRequest -> {
String serviceName = serverRequest.pathVariable("service");
- HttpBodyVo body = serverRequest.body(HttpBodyVo.class);
+ HttpBodyVo body = readBody(serverRequest);
HttpServiceParse serviceParse = new HttpServiceParse(serviceName, body);
Object list = serviceParse.getFirst();
return ServerResponse.accepted().body(list);
});
route.POST(lambdaPath + "/{service}/count", serverRequest -> {
String serviceName = serverRequest.pathVariable("service");
- HttpBodyVo body = serverRequest.body(HttpBodyVo.class);
+ HttpBodyVo body = readBody(serverRequest);
HttpServiceParse serviceParse = new HttpServiceParse(serviceName, body);
Object list = serviceParse.count();
return ServerResponse.accepted().body(list);
});
route.POST(lambdaPath + "/{service}/page", serverRequest -> {
String serviceName = serverRequest.pathVariable("service");
- HttpBodyVo body = serverRequest.body(HttpBodyVo.class);
+ HttpBodyVo body = readBody(serverRequest);
int pageNo = Convert.toInt(serverRequest.param("pageNo").orElse("0"));
int pageSize = Convert.toInt(serverRequest.param("pageSize").orElse("10"));
Boolean haveTotal = serverRequest.param("haveTotal").map(it->Convert.toBool(it,false)).orElse(false);
@@ -70,7 +74,7 @@ public RouterFunction initServer(){
});
route.POST(lambdaPath + "/{service}/findById", serverRequest -> {
String serviceName = serverRequest.pathVariable("service");
- HttpBodyVo body = serverRequest.body(HttpBodyVo.class);
+ HttpBodyVo body = readBody(serverRequest);
HttpServiceParse serviceParse = new HttpServiceParse(serviceName, body);
String id = serverRequest.param("id").orElse(null);
Object list = serviceParse.findById(id);
@@ -78,4 +82,11 @@ public RouterFunction initServer(){
});
return route.build();
}
+
+
+ public static HttpBodyVo readBody(ServerRequest request) throws ServletException, IOException {
+ String body = request.body(String.class);
+ HttpBodyVo httpBodyVo = JSON.parseObject(body, HttpBodyVo.class);
+ return httpBodyVo;
+ }
}
diff --git a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/JkQueryHttpProperties.java b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/JkQueryHttpProperties.java
index e9a10e0..1062207 100644
--- a/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/JkQueryHttpProperties.java
+++ b/lambda-query-http-starter/src/main/java/com/github/xuejike/query/http/server/starter/JkQueryHttpProperties.java
@@ -10,6 +10,6 @@
@ConfigurationProperties("jk-query.http")
@Data
public class JkQueryHttpProperties {
- private String httpServicePath = "/lambda/";
+ private String httpServicePath = "/lambda";
}
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
index 8401cd0..5e441a8 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
@@ -1,14 +1,21 @@
package com.github.xuejike.query.mybatisplus;
+import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.SimpleCache;
+import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.xuejike.query.core.enums.WhereOperation;
import com.github.xuejike.query.core.exception.LambdaQueryException;
import com.github.xuejike.query.core.po.*;
+import java.lang.reflect.Field;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
/**
@@ -16,6 +23,8 @@
* @date 2020/12/28
*/
public class MyBatisPlusBuilder {
+ static SimpleCache,Map> entityMap = new SimpleCache,Map>();
+
public static QueryWrapper build(QueryInfo queryInfo ){
QueryWrapper queryWrapper = new QueryWrapper<>();
@@ -40,7 +49,7 @@ public static void build(QueryWrapper queryWrapper,QueryInfo info){
}
private static void buildField(QueryWrapper queryWrapper, QueryItem item) {
- String field = buildField(item.getField());
+ String field = buildField(queryWrapper.getEntityClass(),item.getField());
for (Map.Entry entry : item.getVal().entrySet()) {
Object value = entry.getValue();
@@ -98,9 +107,24 @@ private static void buildField(QueryWrapper queryWrapper, QueryItem item)
}
}
- public static String buildField(FieldInfo fieldInfo){
- // TODO: 2020/12/30 对注解自定义列处理
- StringBuilder builder = new StringBuilder(fieldInfo.getField());
+ public static String buildField(Class> entityCls,FieldInfo fieldInfo){
+ Map map = entityMap.get(entityCls);
+ if (map == null){
+ map = new ConcurrentHashMap<>();
+ entityMap.put(entityCls,map);
+ Field[] fields = ReflectUtil.getFields(entityCls);
+ for (Field field : fields) {
+ TableField tableField = AnnotationUtil.getAnnotation(field, TableField.class);
+ if (tableField != null && StrUtil.isNotBlank(tableField.value())){
+ map.put(field.getName(),tableField.value());
+ }else{
+ map.put(field.getName(),StrUtil.toUnderlineCase(field.getName()));
+ }
+ }
+ }
+
+
+ StringBuilder builder = new StringBuilder(map.getOrDefault(fieldInfo.getField(),StrUtil.toUnderlineCase(fieldInfo.getField())));
if (fieldInfo.getSubList().size()>0){
throw new LambdaQueryException("mybatis 暂不支持 二级数据查询");
}
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
index 5e5ac44..af067a5 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
@@ -36,15 +36,15 @@ protected QueryWrapper buildQuery(){
MyBatisPlusBuilder.build(build,baseConditionsVo.getWhere());
if (CollUtil.isNotEmpty(baseConditionsVo.getSelectList())){
List selectList = baseConditionsVo.getSelectList();
- build.select(selectList.stream().map(MyBatisPlusBuilder::buildField).toArray(String[]::new));
+ build.select(selectList.stream().map(it->MyBatisPlusBuilder.buildField(entityCls,it)).toArray(String[]::new));
}
if (CollUtil.isNotEmpty(baseConditionsVo.getOrderMap())){
Map orderMap = baseConditionsVo.getOrderMap();
orderMap.entrySet().forEach(it->{
if (it.getValue() == OrderType.desc){
- build.orderByDesc(MyBatisPlusBuilder.buildField(it.getKey()));
+ build.orderByDesc(MyBatisPlusBuilder.buildField(entityCls,it.getKey()));
}else{
- build.orderByAsc(MyBatisPlusBuilder.buildField(it.getKey()));
+ build.orderByAsc(MyBatisPlusBuilder.buildField(entityCls,it.getKey()));
}
});
}
@@ -54,7 +54,7 @@ protected QueryWrapper buildQuery(){
MyBatisPlusBuilder.build(build,queryInfo);
if (CollUtil.isNotEmpty(baseWhereQuery.getSelectList())){
List selectList = baseWhereQuery.getSelectList();
- build.select(selectList.stream().map(MyBatisPlusBuilder::buildField).toArray(String[]::new));
+ build.select(selectList.stream().map(it->MyBatisPlusBuilder.buildField(entityCls,it)).toArray(String[]::new));
}
if (CollUtil.isNotEmpty(baseWhereQuery.getExcludeList())){
List excludeList = baseWhereQuery.getExcludeList();
@@ -64,9 +64,9 @@ protected QueryWrapper buildQuery(){
Map orderMap = baseWhereQuery.getOrderMap();
orderMap.entrySet().forEach(it->{
if (it.getValue() == OrderType.desc){
- build.orderByDesc(MyBatisPlusBuilder.buildField(it.getKey()));
+ build.orderByDesc(MyBatisPlusBuilder.buildField(entityCls,it.getKey()));
}else{
- build.orderByAsc(MyBatisPlusBuilder.buildField(it.getKey()));
+ build.orderByAsc(MyBatisPlusBuilder.buildField(entityCls,it.getKey()));
}
});
}
From 878f29dcfc10ac0d125be271e392cd0d0ae48d4f Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Mon, 4 Jan 2021 17:09:20 +0800
Subject: [PATCH 07/17] =?UTF-8?q?=E5=B9=B6=E8=A1=8C=20=20map?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../github/xuejike/query/core/base/MapDao.java | 17 ++++++++++-------
.../query/mybatisplus/MyBatisPlusDao.java | 3 ++-
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
index 70ad595..8f82a11 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
@@ -18,6 +18,7 @@
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
@@ -52,17 +53,17 @@ private List loadRefMap(List list) {
Map> refClassMap = daoCriteria.getRefClassMap();
log.debug("loadRefMap 耗时统计:加载引用对象{}:",refClassMap.size());
long begin = System.currentTimeMillis();
- Map> refMap = refClassMap.entrySet().parallelStream().collect(Collectors
- .toMap(it -> it.getKey().getField(), entry -> {
+ ConcurrentHashMap> refMap = new ConcurrentHashMap<>(refClassMap.size());
+ refClassMap.entrySet().parallelStream().forEach(entry -> {
Set refIdList = list.stream().map(it -> ReflectUtil.getFieldValue(it, entry.getKey().getField())).collect(Collectors.toSet());
List> refList = JkQuerys.lambdaQuery(entry.getValue().getRefClass())
.in(new CascadeField().subFieldName(entry.getValue().getTargetField().getField()), refIdList)
.list();
Map map = refList.stream().collect(Collectors.toMap(it -> ReflectUtil.getFieldValue(it, entry.getValue().getTargetField().getField()), it -> it));
- log.debug("loadRefMap 耗时统计:关联属性{},加载耗时:{}",entry.getKey().getField(),System.currentTimeMillis()-begin);
- return map;
- }));
- log.debug("loadRefMap 耗时统计:关联属性加载总耗时:{}",System.currentTimeMillis()-begin);
+ log.debug("loadRefMap 耗时统计:关联属性{},加载耗时:{}ms",entry.getKey().getField(),System.currentTimeMillis()-begin);
+ refMap.put(entry.getKey().getField(),map);
+ });
+ log.debug("loadRefMap 耗时统计:关联属性加载总耗时:{}ms",System.currentTimeMillis()-begin);
long elBegin = System.currentTimeMillis();
List collect = list.parallelStream().map(item -> {
R r = BeanUtil.copyProperties(item, resultCls);
@@ -79,7 +80,9 @@ private List loadRefMap(List list) {
return r;
}).collect(Collectors.toList());
- log.debug("loadRefMap 耗时统计:合并数据总耗时:{}",System.currentTimeMillis()-elBegin);
+ log.debug("loadRefMap 耗时统计:合并数据总耗时:{}ms",System.currentTimeMillis()-elBegin);
+ log.debug("loadRefMap 耗时统计:总耗时:{}ms",System.currentTimeMillis()-begin);
+
return collect;
}
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
index af067a5..87bc79b 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
@@ -30,7 +30,8 @@ public MyBatisPlusDao(BaseMapper baseMapper, Class entityCls) {
}
protected QueryWrapper buildQuery(){
- QueryWrapper build = new QueryWrapper<>();
+ QueryWrapper build = new QueryWrapper();
+ build.setEntityClass(entityCls);
if (baseConditionsVo != null){
MyBatisPlusBuilder.build(build,baseConditionsVo.getWhere());
From 0ce41e369db0a3dcfe675dcbe975032146f4beb8 Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Mon, 4 Jan 2021 17:24:32 +0800
Subject: [PATCH 08/17] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=8D=E7=A7=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 45 +++++++++----------
.../{JkLambdaQuery.java => JLambdaQuery.java} | 9 ++--
.../core/{JkQuerys.java => JQuerys.java} | 7 ++-
.../xuejike/query/core/base/MapDao.java | 4 +-
.../query/http/service/HttpServiceParse.java | 13 ++----
.../demo/controller/HttpTestController.java | 8 ++--
mongo-demo/src/test/java/HttpClientTest.java | 13 +-----
mongo-demo/src/test/java/MyBatisTest.java | 7 +--
8 files changed, 42 insertions(+), 64 deletions(-)
rename lambda-query-core/src/main/java/com/github/xuejike/query/core/{JkLambdaQuery.java => JLambdaQuery.java} (75%)
rename lambda-query-core/src/main/java/com/github/xuejike/query/core/{JkQuerys.java => JQuerys.java} (81%)
diff --git a/README.md b/README.md
index fa3878b..78e7d7a 100644
--- a/README.md
+++ b/README.md
@@ -128,13 +128,12 @@ public class TestDoc {
2. 进行查询
```java
-
/**
* == 查询
*/
-@TestMain
+@Test
public void testEq(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).eq(TestDoc::getName, "name_1").list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).eq(TestDoc::getName, "name_1").list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_1");
@@ -144,9 +143,9 @@ public void testEq(){
* 大于号查询
*
*/
-@TestMain
+@Test
public void testGt(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).gt(TestDoc::getNum,3 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).gt(TestDoc::getNum,3 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_4");
@@ -155,9 +154,9 @@ public void testGt(){
/**
* 大于等于查询
*/
-@TestMain
+@Test
public void testGte(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).gte(TestDoc::getNum,4 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).gte(TestDoc::getNum,4 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_4");
@@ -166,9 +165,9 @@ public void testGte(){
/**
* 小于号查询
*/
-@TestMain
+@Test
public void testLt(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).lt(TestDoc::getNum,1 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).lt(TestDoc::getNum,1 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_0");
@@ -177,9 +176,9 @@ public void testLt(){
/**
* 小于等于查询
*/
-@TestMain
+@Test
public void testLte(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).lte(TestDoc::getNum,0 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).lte(TestDoc::getNum,0 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_0");
@@ -188,9 +187,9 @@ public void testLte(){
/**
* In 查询
*/
-@TestMain
+@Test
public void testIn(){
- List list = JkQuerys.lambdaQuery(TestDoc.class)
+ List list = JQuerys.lambdaQuery(TestDoc.class)
.in(TestDoc::getTitle,"title_0" ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
@@ -200,9 +199,9 @@ public void testIn(){
/**
* NotIn 查询
*/
-@TestMain
+@Test
public void testNotIn(){
- List list = JkQuerys.lambdaQuery(TestDoc.class)
+ List list = JQuerys.lambdaQuery(TestDoc.class)
.notIn(TestDoc::getTitle,"title_0","title_1","title_2","title_3" ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
@@ -212,12 +211,12 @@ public void testNotIn(){
/**
* or 查询
*/
-@TestMain
+@Test
public void testOr(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).or().eq(TestDoc::getNum, 0).or().eq(TestDoc::getNum, 1).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).or().eq(TestDoc::getNum, 0).or().eq(TestDoc::getNum, 1).list();
Assertions.assertEquals(list.size(),2);
- list = JkQuerys.lambdaQuery(TestDoc.class).or(it->{
+ list = JQuerys.lambdaQuery(TestDoc.class).or(it->{
it.eq(TestDoc::getNum,0).eq(TestDoc::getName,"name_0");
}).or(it->{
it.eq(TestDoc::getNum,1).eq(TestDoc::getName,"name_1");
@@ -230,14 +229,14 @@ public void testOr(){
/**
* 排序查询
*/
-@TestMain
+@Test
public void testOrder(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderAsc(TestDoc::getNum).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderAsc(TestDoc::getNum).list();
Assertions.assertEquals(list.size(),2);
Assertions.assertEquals(list.get(0).getNum(),1);
Assertions.assertEquals(list.get(1).getNum(),2);
- list = JkQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderDesc(TestDoc::getNum).list();
+ list = JQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderDesc(TestDoc::getNum).list();
Assertions.assertEquals(list.size(),2);
Assertions.assertEquals(list.get(0).getNum(),2);
Assertions.assertEquals(list.get(1).getNum(),1);
@@ -246,9 +245,9 @@ public void testOrder(){
/**
* 二级字段查询
*/
-@TestMain
+@Test
public void testSubField(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).eq(of().subList(TestDoc::getToc).sub(TestDoc.Title::getTitle), "sub_title_0_0").list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).eq(of().subList(TestDoc::getToc).sub(TestDoc.Title::getTitle), "sub_title_0_0").list();
Assertions.assertEquals(list.size(),1);
Assertions.assertEquals(list.get(0).getNum(),0);
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JLambdaQuery.java
similarity index 75%
rename from lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java
rename to lambda-query-core/src/main/java/com/github/xuejike/query/core/JLambdaQuery.java
index d2a8822..4fd5ea7 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkLambdaQuery.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JLambdaQuery.java
@@ -5,7 +5,6 @@
import com.github.xuejike.query.core.base.MapDao;
import com.github.xuejike.query.core.criteria.*;
import com.github.xuejike.query.core.enums.OrderType;
-import com.github.xuejike.query.core.po.FieldInfo;
import com.github.xuejike.query.core.tool.lambda.FieldFunction;
import com.github.xuejike.query.core.tool.lambda.LambdaTool;
@@ -15,10 +14,10 @@
* @author xuejike
* @date 2020/12/18
*/
-public class JkLambdaQuery extends BaseNestedWhereQuery, JkLambdaQuery> implements DaoCriteria , OrderCriteria, JkLambdaQuery>, MapCriteria {
+public class JLambdaQuery extends BaseNestedWhereQuery, JLambdaQuery> implements DaoCriteria , OrderCriteria, JLambdaQuery>, MapCriteria {
private BaseDao daoCriteria;
- public JkLambdaQuery(BaseDao daoCriteria) {
+ public JLambdaQuery(BaseDao daoCriteria) {
this.daoCriteria = daoCriteria;
if (daoCriteria != null){
((InjectionBaseQuery) daoCriteria).injectionBaseWhereQuery(this);
@@ -32,7 +31,7 @@ public DaoCriteria getDao() {
@Override
- public JkLambdaQuery orderAsc(FieldFunction... fields) {
+ public JLambdaQuery orderAsc(FieldFunction... fields) {
Arrays.stream(fields).map(LambdaTool::getFieldInfo).forEach(it->{
orderMap.put(it, OrderType.asc);
});
@@ -41,7 +40,7 @@ public JkLambdaQuery orderAsc(FieldFunction... fields) {
}
@Override
- public JkLambdaQuery orderDesc(FieldFunction... fields) {
+ public JLambdaQuery orderDesc(FieldFunction... fields) {
Arrays.stream(fields).map(LambdaTool::getFieldInfo).forEach(it->{
orderMap.put(it, OrderType.desc);
});
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkQuerys.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
similarity index 81%
rename from lambda-query-core/src/main/java/com/github/xuejike/query/core/JkQuerys.java
rename to lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
index 0713db2..2fff45b 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JkQuerys.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
@@ -5,22 +5,21 @@
import com.github.xuejike.query.core.base.BaseDao;
import com.github.xuejike.query.core.config.DaoFactory;
import com.github.xuejike.query.core.config.JkQueryConfig;
-import com.github.xuejike.query.core.criteria.DaoCriteria;
import com.github.xuejike.query.core.exception.LambdaQueryException;
/**
* @author xuejike
* @date 2020/12/28
*/
-public class JkQuerys {
+public class JQuerys {
- public static JkLambdaQuery lambdaQuery(Class entityCls){
+ public static JLambdaQuery lambdaQuery(Class entityCls){
JkQueryConfig instance = JkQueryConfig.getInstance();
for (DaoFactory factory : instance.getDaoFactoryList()) {
DaoSelect annotation = AnnotationUtil.getAnnotation(entityCls, DaoSelect.class);
if (factory.getDaoCls() == annotation.daoCls()){
BaseDao daoCriteria = factory.createDao(entityCls);
- return new JkLambdaQuery<>(daoCriteria);
+ return new JLambdaQuery<>(daoCriteria);
}
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
index 8f82a11..9d7ec31 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
@@ -3,7 +3,7 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ReflectUtil;
-import com.github.xuejike.query.core.JkQuerys;
+import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.core.criteria.DaoCriteria;
import com.github.xuejike.query.core.criteria.GetDaoCriteria;
import com.github.xuejike.query.core.criteria.IJPage;
@@ -56,7 +56,7 @@ private List loadRefMap(List list) {
ConcurrentHashMap> refMap = new ConcurrentHashMap<>(refClassMap.size());
refClassMap.entrySet().parallelStream().forEach(entry -> {
Set refIdList = list.stream().map(it -> ReflectUtil.getFieldValue(it, entry.getKey().getField())).collect(Collectors.toSet());
- List> refList = JkQuerys.lambdaQuery(entry.getValue().getRefClass())
+ List> refList = JQuerys.lambdaQuery(entry.getValue().getRefClass())
.in(new CascadeField().subFieldName(entry.getValue().getTargetField().getField()), refIdList)
.list();
Map map = refList.stream().collect(Collectors.toMap(it -> ReflectUtil.getFieldValue(it, entry.getValue().getTargetField().getField()), it -> it));
diff --git a/lambda-query-http/src/main/java/com/github/xuejike/query/http/service/HttpServiceParse.java b/lambda-query-http/src/main/java/com/github/xuejike/query/http/service/HttpServiceParse.java
index da97d6e..a9e5900 100644
--- a/lambda-query-http/src/main/java/com/github/xuejike/query/http/service/HttpServiceParse.java
+++ b/lambda-query-http/src/main/java/com/github/xuejike/query/http/service/HttpServiceParse.java
@@ -1,18 +1,13 @@
package com.github.xuejike.query.http.service;
import cn.hutool.core.lang.Assert;
-import com.github.xuejike.query.core.JkLambdaQuery;
-import com.github.xuejike.query.core.JkQuerys;
+import com.github.xuejike.query.core.JLambdaQuery;
+import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.core.base.BaseDao;
import com.github.xuejike.query.core.criteria.DaoCriteria;
-import com.github.xuejike.query.core.po.QueryInfo;
-import com.github.xuejike.query.core.po.QueryItem;
-import com.github.xuejike.query.core.tool.lambda.CascadeField;
import com.github.xuejike.query.http.LambdaQueryHttpConfig;
import com.github.xuejike.query.http.vo.HttpBodyVo;
-import java.util.List;
-
/**
* @author xuejike
* @date 2021/1/4
@@ -20,7 +15,7 @@
public class HttpServiceParse implements DaoCriteria {
private String serviceName;
private HttpBodyVo httpBodyVo;
- private JkLambdaQuery> lambdaQuery;
+ private JLambdaQuery> lambdaQuery;
public HttpServiceParse(String serviceName, HttpBodyVo httpBodyVo) {
@@ -31,7 +26,7 @@ public HttpServiceParse(String serviceName, HttpBodyVo httpBodyVo) {
private void init(){
Class> serviceEntityCls = LambdaQueryHttpConfig.getInstance().getServiceEntityCls(serviceName);
Assert.notNull(serviceEntityCls,"未发现服务");
- lambdaQuery = JkQuerys.lambdaQuery(serviceEntityCls);
+ lambdaQuery = JQuerys.lambdaQuery(serviceEntityCls);
BaseDao baseDao = (BaseDao) lambdaQuery.getDao();
baseDao.setBaseConditionsVo(httpBodyVo);
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/controller/HttpTestController.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/controller/HttpTestController.java
index 289341a..0db6454 100644
--- a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/controller/HttpTestController.java
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/controller/HttpTestController.java
@@ -1,10 +1,9 @@
package com.github.xuejike.query.mongo.demo.controller;
-import com.github.xuejike.query.core.JkLambdaQuery;
-import com.github.xuejike.query.core.JkQuerys;
+import com.github.xuejike.query.core.JLambdaQuery;
+import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.http.LambdaQueryHttpConfig;
import com.github.xuejike.query.http.client.HttpClientFactory;
-import com.github.xuejike.query.http.server.starter.HttpServiceConfig;
import com.github.xuejike.query.mongo.demo.http.HttpEntity;
import com.github.xuejike.query.mongo.demo.mybatis.entity.U1;
import com.github.xuejike.query.mongo.demo.mybatis.entity.U2;
@@ -14,7 +13,6 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
-import java.util.List;
/**
* @author xuejike
@@ -33,7 +31,7 @@ public void init(){
}
@GetMapping("list")
public Object testList(){
- JkLambdaQuery query = JkQuerys.lambdaQuery(HttpEntity.class);
+ JLambdaQuery query = JQuerys.lambdaQuery(HttpEntity.class);
Object list = query.or().eq(HttpEntity::getName,"name1").or()
.eq(HttpEntity::getName,"name2")
.loadRef(HttpEntity::getU2Id, U2.class,U2::getId).map(U1Vo.class).list();
diff --git a/mongo-demo/src/test/java/HttpClientTest.java b/mongo-demo/src/test/java/HttpClientTest.java
index 52c5a2a..12ad365 100644
--- a/mongo-demo/src/test/java/HttpClientTest.java
+++ b/mongo-demo/src/test/java/HttpClientTest.java
@@ -1,13 +1,6 @@
-import cn.hutool.extra.spring.SpringUtil;
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.github.xuejike.query.core.JkQuerys;
+import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.http.client.HttpClientFactory;
import com.github.xuejike.query.mongo.demo.App;
-import com.github.xuejike.query.mongo.demo.mybatis.entity.U1;
-import com.github.xuejike.query.mongo.demo.mybatis.entity.U2;
-import com.github.xuejike.query.mongo.demo.vo.U1Vo;
-import com.github.xuejike.query.mybatisplus.MyBatisPlusDaoFactory;
import http.HttpRequest;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
@@ -16,8 +9,6 @@
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
-import java.util.List;
-
/**
* @author xuejike
* @date 2020/12/31
@@ -36,6 +27,6 @@ public void before(){
@Test
public void list(){
- JkQuerys.lambdaQuery(HttpRequest.class).eq(HttpRequest::getName,"xxx").eq(HttpRequest::getUserName,"un").list();
+ JQuerys.lambdaQuery(HttpRequest.class).eq(HttpRequest::getName,"xxx").eq(HttpRequest::getUserName,"un").list();
}
}
diff --git a/mongo-demo/src/test/java/MyBatisTest.java b/mongo-demo/src/test/java/MyBatisTest.java
index 8185d66..cb03c1a 100644
--- a/mongo-demo/src/test/java/MyBatisTest.java
+++ b/mongo-demo/src/test/java/MyBatisTest.java
@@ -1,18 +1,15 @@
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.github.xuejike.query.core.JkQuerys;
-import com.github.xuejike.query.mongo.MongoDaoFactory;
+import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.mongo.demo.App;
import com.github.xuejike.query.mongo.demo.mybatis.entity.U1;
import com.github.xuejike.query.mongo.demo.mybatis.entity.U2;
-import com.github.xuejike.query.mongo.demo.mybatis.mapper.U1Mapper;
import com.github.xuejike.query.mongo.demo.vo.U1Vo;
import com.github.xuejike.query.mybatisplus.MyBatisPlusDaoFactory;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
@@ -37,7 +34,7 @@ public void before(){
@Test
public void list(){
- List list = JkQuerys.lambdaQuery(U1.class)
+ List list = JQuerys.lambdaQuery(U1.class)
.loadRef(U1::getU2Id, U2.class, U2::getId)
.map(U1Vo.class).list();
System.out.println(JSON.toJSONString(list));
From fc32e4df8f2cd11324cf9b0a9e96314999a7796d Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Mon, 4 Jan 2021 17:25:28 +0800
Subject: [PATCH 09/17] =?UTF-8?q?=E6=96=87=E6=A1=A3=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 78e7d7a..7ced85a 100644
--- a/README.md
+++ b/README.md
@@ -6,18 +6,19 @@ LambdaQuery 将支持通过Lambda进行多种数据源的查询 实现java端的
## 功能规划
### 1. MongoDb
* [x] 实现基础的Lambda查询(已完成)
-* [ ] 实现 新增,删除,更新等基础操作[开发中]
+* [ ] 实现 新增,删除,更新等基础操作
+* [x] 新增LoadJoin功能,通过selectIn的方式进行数据表join
### 2. mybatis-plus
* [x] 接入mybatis-plus的查询接口(已完成)
* [ ] 接入mybatis-plus 的新增,删除,更新操作
-* [ ] 新增LoadJoin功能,通过selectIn的方式进行数据表join
+* [x] 新增LoadJoin功能,通过selectIn的方式进行数据表join
* [ ] 新增Cache功能,采用redis 进行数据缓存,配合selectIn方式避免join查询直接访问数据库
* [ ] 新增Map接口,实现selectIn后数据合并问题
### 3. HttpServer&HttpClient
-* [ ] 新增Http模式,实现微服务之间 关联数据join 显示问题
-* [ ] 扩展全功能查询,实现微服务之间的HTTP接口数据查询功能
+* [x] 新增Http模式,实现微服务之间 关联数据join 显示问题
+* [x] 扩展全功能查询,实现微服务之间的HTTP接口数据查询功能
* [ ] 扩展 Http 自定义查询字段和结果集字段,可以实现灵活空值查询字段与条件
* [ ] 新增拦截器,实现对查询,新增,修改操作的全局拦截,可以实现后端租户拦截,http接口的权限拦截限制
From 30ca55b281ea066698a13ba6b157aeccd88e2c70 Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Mon, 4 Jan 2021 17:29:19 +0800
Subject: [PATCH 10/17] =?UTF-8?q?=E6=96=87=E6=A1=A3=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/README.md b/README.md
index 7ced85a..2b573e4 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,10 @@
## 介绍
LambdaQuery 将支持通过Lambda进行多种数据源的查询 实现java端的简单数据的统一查询
## 功能规划
+### 总体功能规划
+* [x] 实现基础查询功能
+* [x] 实现LoadRef功能,通过selectIn的方式进行数据表join, 实现跨服务,分布式数据库,跨不同数据库之间的join
+* [ ] 增加redisCache功能,实现在loadRef的时候 可以通过配置项进行设置是否通过cache 进行加载
### 1. MongoDb
* [x] 实现基础的Lambda查询(已完成)
* [ ] 实现 新增,删除,更新等基础操作
From 62a2175fd1a609b2dbece93984a56d222c471e34 Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Mon, 4 Jan 2021 17:55:31 +0800
Subject: [PATCH 11/17] =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../query/mybatisplus/MyBatisPlusBuilder.java | 55 +++++++++++++++----
.../query/mongo/demo/enums/U1Status.java | 16 ++++++
.../query/mongo/demo/mybatis/entity/U1.java | 4 +-
.../src/main/resources/application.yaml | 4 +-
mongo-demo/src/test/java/MyBatisTest.java | 2 +
mongo-demo/src/test/java/TestMain.java | 42 ++++++--------
mongo-demo/src/test/java/TestNoSpring.java | 11 +---
7 files changed, 87 insertions(+), 47 deletions(-)
create mode 100644 mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/enums/U1Status.java
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
index 5e441a8..a3ce0cc 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
@@ -3,6 +3,7 @@
import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.SimpleCache;
+import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
@@ -17,6 +18,7 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
+import java.util.stream.Collectors;
/**
* @author xuejike
@@ -55,27 +57,27 @@ private static void buildField(QueryWrapper queryWrapper, QueryItem item)
Object value = entry.getValue();
switch (entry.getKey()){
case eq:{
- queryWrapper.eq(field, value);
+ queryWrapper.eq(field, getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
break;
}
case lt:
- queryWrapper.lt(field, value);
+ queryWrapper.lt(field, getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
break;
case lte:
- queryWrapper.le(field, value);
+ queryWrapper.le(field, getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
break;
case gt:
- queryWrapper.gt(field,value);
+ queryWrapper.gt(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
break;
case gte:
- queryWrapper.ge(field,value);
+ queryWrapper.ge(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
break;
case between:
BetweenObj betweenObj = (BetweenObj) value;
queryWrapper.between(field,betweenObj.getFirst(),betweenObj.getSecond());
break;
case ne:
- queryWrapper.ne(field,value);
+ queryWrapper.ne(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
break;
case isNull:
queryWrapper.isNull(field);
@@ -85,21 +87,21 @@ private static void buildField(QueryWrapper queryWrapper, QueryItem item)
break;
case notIn:
if (value instanceof Collection){
- queryWrapper.notIn(field,(Collection>) value);
+ queryWrapper.notIn(field,getValue(queryWrapper.getEntityClass(),item.getField(),getValue(queryWrapper.getEntityClass(),item.getField(),(Collection>) value)));
}else{
- queryWrapper.notIn(field,value);
+ queryWrapper.notIn(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
}
break;
case in:
if (value instanceof Collection){
- queryWrapper.in(field,(Collection>) value);
+ queryWrapper.in(field,getValue(queryWrapper.getEntityClass(),item.getField(),(Collection>) value));
}else{
- queryWrapper.in(field,value);
+ queryWrapper.in(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
}
break;
case like:
- queryWrapper.like(field,likeValue(value));
+ queryWrapper.like(field,likeValue(getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal())));
break;
default:
break;
@@ -131,6 +133,37 @@ public static String buildField(Class> entityCls,FieldInfo fieldInfo){
return builder.toString();
}
+
+ public static Object getValue(Class> entityCls,FieldInfo fieldInfo,Object val){
+ Field field = ReflectUtil.getField(entityCls, fieldInfo.getField());
+ if (field != null && field.getType().isEnum()){
+ Class extends Enum> type = (Class extends Enum>) field.getType();
+ if (val instanceof String){
+ return EnumUtil.fromString(type, ((String) val));
+ }
+ if (val instanceof Number){
+ return EnumUtil.getEnumAt(type,((Number) val).intValue());
+ }
+ }
+ return val;
+ }
+ public static Object getValue(Class> entityCls,FieldInfo fieldInfo,Collection> val){
+ Field field = ReflectUtil.getField(entityCls, fieldInfo.getField());
+ if (field != null && field.getType().isEnum()){
+ Class extends Enum> type = (Class extends Enum>) field.getType();
+ return val.stream().map(it->{
+ if (it instanceof String){
+ return EnumUtil.fromString(type, ((String) it));
+ }
+ if (it instanceof Number){
+ return EnumUtil.getEnumAt(type,((Number) it).intValue());
+ }
+ return it;
+ }).collect(Collectors.toList());
+
+ }
+ return val;
+ }
private static String likeValue(Object val){
if (val instanceof LikeValObj){
LikeValObj likeValObj = (LikeValObj) val;
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/enums/U1Status.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/enums/U1Status.java
new file mode 100644
index 0000000..717f489
--- /dev/null
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/enums/U1Status.java
@@ -0,0 +1,16 @@
+package com.github.xuejike.query.mongo.demo.enums;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+
+/**
+ * @author xuejike
+ * @date 2021/1/4
+ */
+public enum U1Status implements IEnum {
+ T1,T2;
+
+ @Override
+ public Long getValue() {
+ return Long.valueOf(this.ordinal());
+ }
+}
diff --git a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/mybatis/entity/U1.java b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/mybatis/entity/U1.java
index 81abbe2..929b409 100644
--- a/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/mybatis/entity/U1.java
+++ b/mongo-demo/src/main/java/com/github/xuejike/query/mongo/demo/mybatis/entity/U1.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.github.xuejike.query.mongo.demo.enums.U1Status;
import com.github.xuejike.query.mybatisplus.annotation.MyBatisPlusDaoSelect;
import lombok.Data;
@@ -19,5 +20,6 @@ public class U1 {
private String name;
private String type;
private Long u2Id;
-
+
+ private U1Status status;
}
diff --git a/mongo-demo/src/main/resources/application.yaml b/mongo-demo/src/main/resources/application.yaml
index 3eae0de..a64b6d6 100644
--- a/mongo-demo/src/main/resources/application.yaml
+++ b/mongo-demo/src/main/resources/application.yaml
@@ -18,4 +18,6 @@ logging:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(-%5p) %clr(${PID:- }){magenta} --- %clr([%15.15t]){faint} %highlight(%-80.80logger{300}){cyan} %clr(:) %m %n%wEx"
server:
port: 7000
-debug: true
\ No newline at end of file
+debug: true
+mybatis-plus:
+ type-enums-package: com.github.xuejike.query.mongo.demo.enums
\ No newline at end of file
diff --git a/mongo-demo/src/test/java/MyBatisTest.java b/mongo-demo/src/test/java/MyBatisTest.java
index cb03c1a..492cbd5 100644
--- a/mongo-demo/src/test/java/MyBatisTest.java
+++ b/mongo-demo/src/test/java/MyBatisTest.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.mongo.demo.App;
+import com.github.xuejike.query.mongo.demo.enums.U1Status;
import com.github.xuejike.query.mongo.demo.mybatis.entity.U1;
import com.github.xuejike.query.mongo.demo.mybatis.entity.U2;
import com.github.xuejike.query.mongo.demo.vo.U1Vo;
@@ -35,6 +36,7 @@ public void before(){
@Test
public void list(){
List list = JQuerys.lambdaQuery(U1.class)
+ .eq(U1::getStatus, U1Status.T1)
.loadRef(U1::getU2Id, U2.class, U2::getId)
.map(U1Vo.class).list();
System.out.println(JSON.toJSONString(list));
diff --git a/mongo-demo/src/test/java/TestMain.java b/mongo-demo/src/test/java/TestMain.java
index 0f44082..5522a5a 100644
--- a/mongo-demo/src/test/java/TestMain.java
+++ b/mongo-demo/src/test/java/TestMain.java
@@ -1,39 +1,29 @@
-import cn.hutool.core.util.NumberUtil;
-import cn.hutool.core.util.TypeUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.github.xuejike.query.core.JkLambdaQuery;
+import com.github.xuejike.query.core.JLambdaQuery;
-import com.github.xuejike.query.core.JkQuerys;
+import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.core.tool.lambda.CascadeField;
-import com.github.xuejike.query.mongo.MongoDao;
import com.github.xuejike.query.mongo.MongoDaoFactory;
import com.github.xuejike.query.mongo.demo.App;
import com.github.xuejike.query.mongo.demo.data.TestDoc;
import com.github.xuejike.query.mongo.demo.mybatis.entity.U1;
-import com.github.xuejike.query.mongo.demo.mybatis.mapper.U1Mapper;
import com.github.xuejike.query.mybatisplus.MyBatisPlusDaoFactory;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.annotation.Rollback;
-import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
-import java.lang.reflect.Type;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
/**
* @author xuejike
@@ -77,7 +67,7 @@ public void Test(){
- JkLambdaQuery lambda = JkQuerys.lambdaQuery(TestDoc.class);
+ JLambdaQuery lambda = JQuerys.lambdaQuery(TestDoc.class);
// Query query = new Query();
// query.addCriteria(new Criteria().orOperator(Criteria.where("name").is("999"))
@@ -97,7 +87,7 @@ public void Test(){
*/
@Test
public void testEq(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).eq(TestDoc::getName, "name_1").list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).eq(TestDoc::getName, "name_1").list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_1");
@@ -109,7 +99,7 @@ public void testEq(){
*/
@Test
public void testGt(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).gt(TestDoc::getNum,3 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).gt(TestDoc::getNum,3 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_4");
@@ -120,7 +110,7 @@ public void testGt(){
*/
@Test
public void testGte(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).gte(TestDoc::getNum,4 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).gte(TestDoc::getNum,4 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_4");
@@ -131,7 +121,7 @@ public void testGte(){
*/
@Test
public void testLt(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).lt(TestDoc::getNum,1 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).lt(TestDoc::getNum,1 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_0");
@@ -142,7 +132,7 @@ public void testLt(){
*/
@Test
public void testLte(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).lte(TestDoc::getNum,0 ).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).lte(TestDoc::getNum,0 ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
Assertions.assertEquals(testDoc.getTitle(),"title_0");
@@ -153,7 +143,7 @@ public void testLte(){
*/
@Test
public void testIn(){
- List list = JkQuerys.lambdaQuery(TestDoc.class)
+ List list = JQuerys.lambdaQuery(TestDoc.class)
.in(TestDoc::getTitle,"title_0" ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
@@ -165,7 +155,7 @@ public void testIn(){
*/
@Test
public void testNotIn(){
- List list = JkQuerys.lambdaQuery(TestDoc.class)
+ List list = JQuerys.lambdaQuery(TestDoc.class)
.notIn(TestDoc::getTitle,"title_0","title_1","title_2","title_3" ).list();
Assertions.assertEquals(list.size(),1);
TestDoc testDoc = list.get(0);
@@ -177,10 +167,10 @@ public void testNotIn(){
*/
@Test
public void testOr(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).or().eq(TestDoc::getNum, 0).or().eq(TestDoc::getNum, 1).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).or().eq(TestDoc::getNum, 0).or().eq(TestDoc::getNum, 1).list();
Assertions.assertEquals(list.size(),2);
- list = JkQuerys.lambdaQuery(TestDoc.class).or(it->{
+ list = JQuerys.lambdaQuery(TestDoc.class).or(it->{
it.eq(TestDoc::getNum,0).eq(TestDoc::getName,"name_0");
}).or(it->{
it.eq(TestDoc::getNum,1).eq(TestDoc::getName,"name_1");
@@ -195,12 +185,12 @@ public void testOr(){
*/
@Test
public void testOrder(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderAsc(TestDoc::getNum).list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderAsc(TestDoc::getNum).list();
Assertions.assertEquals(list.size(),2);
Assertions.assertEquals(list.get(0).getNum(),1);
Assertions.assertEquals(list.get(1).getNum(),2);
- list = JkQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderDesc(TestDoc::getNum).list();
+ list = JQuerys.lambdaQuery(TestDoc.class).in(TestDoc::getNum, 1, 2).orderDesc(TestDoc::getNum).list();
Assertions.assertEquals(list.size(),2);
Assertions.assertEquals(list.get(0).getNum(),2);
Assertions.assertEquals(list.get(1).getNum(),1);
@@ -211,7 +201,7 @@ public void testOrder(){
*/
@Test
public void testSubField(){
- List list = JkQuerys.lambdaQuery(TestDoc.class).eq(of().subList(TestDoc::getToc).sub(TestDoc.Title::getTitle), "sub_title_0_0").list();
+ List list = JQuerys.lambdaQuery(TestDoc.class).eq(of().subList(TestDoc::getToc).sub(TestDoc.Title::getTitle), "sub_title_0_0").list();
Assertions.assertEquals(list.size(),1);
Assertions.assertEquals(list.get(0).getNum(),0);
}
@@ -230,7 +220,7 @@ public void testAddU1(){
}
@Test
public void queryU1(){
- List list = JkQuerys.lambdaQuery(U1.class)
+ List list = JQuerys.lambdaQuery(U1.class)
.eq(U1::getId, 1)
.or().eq(U1::getId,2)
.or(or->
diff --git a/mongo-demo/src/test/java/TestNoSpring.java b/mongo-demo/src/test/java/TestNoSpring.java
index 293043e..4c9babc 100644
--- a/mongo-demo/src/test/java/TestNoSpring.java
+++ b/mongo-demo/src/test/java/TestNoSpring.java
@@ -1,12 +1,7 @@
-import com.github.xuejike.query.core.JkLambdaQuery;
-import com.github.xuejike.query.core.JkQuerys;
-import com.github.xuejike.query.core.config.JkQueryConfig;
-import com.github.xuejike.query.mongo.MongoDaoFactory;
+import com.github.xuejike.query.core.JLambdaQuery;
+import com.github.xuejike.query.core.JQuerys;
import com.github.xuejike.query.mongo.demo.data.TestDoc;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.mongodb.core.MongoTemplate;
import java.util.List;
@@ -18,7 +13,7 @@ public class TestNoSpring {
@Test
public void test(){
- JkLambdaQuery query = JkQuerys.lambdaQuery(TestDoc.class);
+ JLambdaQuery query = JQuerys.lambdaQuery(TestDoc.class);
List list = query.eq(TestDoc::getId, "666").list();
}
From 00820230311250996a0805e99076ebc4647813ae Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Tue, 5 Jan 2021 19:31:58 +0800
Subject: [PATCH 12/17] =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../github/xuejike/query/core/JQuerys.java | 2 +-
.../xuejike/query/core/base/MapDao.java | 1 +
.../query/mybatisplus/MyBatisPlusBuilder.java | 56 ++++++++-----------
mongo-demo/pom.xml | 11 ++++
4 files changed, 37 insertions(+), 33 deletions(-)
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
index 2fff45b..849d025 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
@@ -23,6 +23,6 @@ public static JLambdaQuery lambdaQuery(Class entityCls){
}
}
- throw new LambdaQueryException("not find dao ");
+ throw new LambdaQueryException("not find dao {}",entityCls.getName());
}
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
index 9d7ec31..e7a4535 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/MapDao.java
@@ -55,6 +55,7 @@ private List loadRefMap(List list) {
long begin = System.currentTimeMillis();
ConcurrentHashMap> refMap = new ConcurrentHashMap<>(refClassMap.size());
refClassMap.entrySet().parallelStream().forEach(entry -> {
+
Set refIdList = list.stream().map(it -> ReflectUtil.getFieldValue(it, entry.getKey().getField())).collect(Collectors.toSet());
List> refList = JQuerys.lambdaQuery(entry.getValue().getRefClass())
.in(new CascadeField().subFieldName(entry.getValue().getTargetField().getField()), refIdList)
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
index a3ce0cc..a73de67 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
@@ -2,6 +2,7 @@
import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.SimpleCache;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ReflectUtil;
@@ -57,27 +58,28 @@ private static void buildField(QueryWrapper queryWrapper, QueryItem item)
Object value = entry.getValue();
switch (entry.getKey()){
case eq:{
- queryWrapper.eq(field, getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.eq(field, getValue(queryWrapper.getEntityClass(),item.getField(),value));
break;
}
case lt:
- queryWrapper.lt(field, getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.lt(field, getValue(queryWrapper.getEntityClass(),item.getField(),value));
break;
case lte:
- queryWrapper.le(field, getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.le(field, getValue(queryWrapper.getEntityClass(),item.getField(),value));
break;
case gt:
- queryWrapper.gt(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.gt(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
break;
case gte:
- queryWrapper.ge(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.ge(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
break;
case between:
BetweenObj betweenObj = (BetweenObj) value;
- queryWrapper.between(field,betweenObj.getFirst(),betweenObj.getSecond());
+ queryWrapper.between(field,getValue(queryWrapper.getEntityClass(),item.getField(),betweenObj.getFirst()),
+ getValue(queryWrapper.getEntityClass(),item.getField(),betweenObj.getSecond()));
break;
case ne:
- queryWrapper.ne(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.ne(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
break;
case isNull:
queryWrapper.isNull(field);
@@ -89,19 +91,19 @@ private static void buildField(QueryWrapper queryWrapper, QueryItem item)
if (value instanceof Collection){
queryWrapper.notIn(field,getValue(queryWrapper.getEntityClass(),item.getField(),getValue(queryWrapper.getEntityClass(),item.getField(),(Collection>) value)));
}else{
- queryWrapper.notIn(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.notIn(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
}
break;
case in:
if (value instanceof Collection){
queryWrapper.in(field,getValue(queryWrapper.getEntityClass(),item.getField(),(Collection>) value));
}else{
- queryWrapper.in(field,getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal()));
+ queryWrapper.in(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
}
break;
case like:
- queryWrapper.like(field,likeValue(getValue(queryWrapper.getEntityClass(),item.getField(),item.getVal())));
+ queryWrapper.like(field,likeValue(getValue(queryWrapper.getEntityClass(),item.getField(),value)));
break;
default:
break;
@@ -136,33 +138,23 @@ public static String buildField(Class> entityCls,FieldInfo fieldInfo){
public static Object getValue(Class> entityCls,FieldInfo fieldInfo,Object val){
Field field = ReflectUtil.getField(entityCls, fieldInfo.getField());
- if (field != null && field.getType().isEnum()){
- Class extends Enum> type = (Class extends Enum>) field.getType();
- if (val instanceof String){
- return EnumUtil.fromString(type, ((String) val));
- }
- if (val instanceof Number){
- return EnumUtil.getEnumAt(type,((Number) val).intValue());
- }
+ try {
+ return Convert.convert(field.getType(),val);
+ }catch (Exception ex){
+ return val;
}
- return val;
+
}
public static Object getValue(Class> entityCls,FieldInfo fieldInfo,Collection> val){
Field field = ReflectUtil.getField(entityCls, fieldInfo.getField());
- if (field != null && field.getType().isEnum()){
- Class extends Enum> type = (Class extends Enum>) field.getType();
- return val.stream().map(it->{
- if (it instanceof String){
- return EnumUtil.fromString(type, ((String) it));
- }
- if (it instanceof Number){
- return EnumUtil.getEnumAt(type,((Number) it).intValue());
- }
- return it;
- }).collect(Collectors.toList());
- }
- return val;
+ return val.stream().map(it-> {
+ try {
+ return Convert.convert(field.getType(),it);
+ }catch (Exception ex){
+ return it;
+ }
+ }).collect(Collectors.toList());
}
private static String likeValue(Object val){
if (val instanceof LikeValObj){
diff --git a/mongo-demo/pom.xml b/mongo-demo/pom.xml
index ab2e279..14dffaf 100644
--- a/mongo-demo/pom.xml
+++ b/mongo-demo/pom.xml
@@ -62,6 +62,11 @@
lambda-query-mybatis-plus-starter
${query.version}
+
+ com.github.xuejike
+ lambda-query-mybatis-plus
+ ${query.version}
+
com.github.xuejike
lambda-query-http
@@ -71,6 +76,12 @@
com.github.xuejike
lambda-query-http-starter
${query.version}
+
+
+ jsr305
+ com.google.code.findbugs
+
+
From 48ab32c76688990776d14b2de3828f44bb555a8b Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Tue, 5 Jan 2021 19:48:03 +0800
Subject: [PATCH 13/17] class
---
.../query/mybatisplus/MyBatisPlusBuilder.java | 40 +++++++++----------
.../query/mybatisplus/MyBatisPlusDao.java | 4 +-
2 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
index a73de67..180bcf1 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusBuilder.java
@@ -28,58 +28,58 @@
public class MyBatisPlusBuilder {
static SimpleCache,Map> entityMap = new SimpleCache,Map>();
- public static QueryWrapper build(QueryInfo queryInfo ){
+ public static QueryWrapper build(Class> entityCls,QueryInfo queryInfo ){
QueryWrapper queryWrapper = new QueryWrapper<>();
- build(queryWrapper,queryInfo);
+ build(entityCls,queryWrapper,queryInfo);
return queryWrapper;
}
- public static void build(QueryWrapper queryWrapper,QueryInfo info){
+ public static void build(Class> entityCls,QueryWrapper queryWrapper,QueryInfo info){
for (QueryItem item : info.getAnd()) {
- buildField(queryWrapper,item);
+ buildField(entityCls,queryWrapper,item);
}
if (CollUtil.isNotEmpty(info.getOr())){
for (QueryInfo queryInfo : info.getOr()) {
if (CollUtil.isNotEmpty(queryInfo.getOr()) || CollUtil.isNotEmpty(queryInfo.getAnd())){
queryWrapper.or(or->{
- build(or,queryInfo);
+ build(entityCls,or,queryInfo);
});
}
}
}
}
- private static void buildField(QueryWrapper queryWrapper, QueryItem item) {
- String field = buildField(queryWrapper.getEntityClass(),item.getField());
+ private static void buildField(Class> entityCls,QueryWrapper queryWrapper, QueryItem item) {
+ String field = buildField(entityCls,item.getField());
for (Map.Entry entry : item.getVal().entrySet()) {
Object value = entry.getValue();
switch (entry.getKey()){
case eq:{
- queryWrapper.eq(field, getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.eq(field, getValue(entityCls,item.getField(),value));
break;
}
case lt:
- queryWrapper.lt(field, getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.lt(field, getValue(entityCls,item.getField(),value));
break;
case lte:
- queryWrapper.le(field, getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.le(field, getValue(entityCls,item.getField(),value));
break;
case gt:
- queryWrapper.gt(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.gt(field,getValue(entityCls,item.getField(),value));
break;
case gte:
- queryWrapper.ge(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.ge(field,getValue(entityCls,item.getField(),value));
break;
case between:
BetweenObj betweenObj = (BetweenObj) value;
- queryWrapper.between(field,getValue(queryWrapper.getEntityClass(),item.getField(),betweenObj.getFirst()),
- getValue(queryWrapper.getEntityClass(),item.getField(),betweenObj.getSecond()));
+ queryWrapper.between(field,getValue(entityCls,item.getField(),betweenObj.getFirst()),
+ getValue(entityCls,item.getField(),betweenObj.getSecond()));
break;
case ne:
- queryWrapper.ne(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.ne(field,getValue(entityCls,item.getField(),value));
break;
case isNull:
queryWrapper.isNull(field);
@@ -89,21 +89,21 @@ private static void buildField(QueryWrapper queryWrapper, QueryItem item)
break;
case notIn:
if (value instanceof Collection){
- queryWrapper.notIn(field,getValue(queryWrapper.getEntityClass(),item.getField(),getValue(queryWrapper.getEntityClass(),item.getField(),(Collection>) value)));
+ queryWrapper.notIn(field,getValue(entityCls,item.getField(),getValue(entityCls,item.getField(),(Collection>) value)));
}else{
- queryWrapper.notIn(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.notIn(field,getValue(entityCls,item.getField(),value));
}
break;
case in:
if (value instanceof Collection){
- queryWrapper.in(field,getValue(queryWrapper.getEntityClass(),item.getField(),(Collection>) value));
+ queryWrapper.in(field,getValue(entityCls,item.getField(),(Collection>) value));
}else{
- queryWrapper.in(field,getValue(queryWrapper.getEntityClass(),item.getField(),value));
+ queryWrapper.in(field,getValue(entityCls,item.getField(),value));
}
break;
case like:
- queryWrapper.like(field,likeValue(getValue(queryWrapper.getEntityClass(),item.getField(),value)));
+ queryWrapper.like(field,likeValue(getValue(entityCls,item.getField(),value)));
break;
default:
break;
diff --git a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
index 87bc79b..a21f830 100644
--- a/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
+++ b/lambda-query-mybatis-plus/src/main/java/com/github/xuejike/query/mybatisplus/MyBatisPlusDao.java
@@ -34,7 +34,7 @@ protected QueryWrapper buildQuery(){
build.setEntityClass(entityCls);
if (baseConditionsVo != null){
- MyBatisPlusBuilder.build(build,baseConditionsVo.getWhere());
+ MyBatisPlusBuilder.build(entityCls,build,baseConditionsVo.getWhere());
if (CollUtil.isNotEmpty(baseConditionsVo.getSelectList())){
List selectList = baseConditionsVo.getSelectList();
build.select(selectList.stream().map(it->MyBatisPlusBuilder.buildField(entityCls,it)).toArray(String[]::new));
@@ -52,7 +52,7 @@ protected QueryWrapper buildQuery(){
}
QueryInfo queryInfo = baseWhereQuery.buildQueryInfo();
- MyBatisPlusBuilder.build(build,queryInfo);
+ MyBatisPlusBuilder.build(entityCls,build,queryInfo);
if (CollUtil.isNotEmpty(baseWhereQuery.getSelectList())){
List selectList = baseWhereQuery.getSelectList();
build.select(selectList.stream().map(it->MyBatisPlusBuilder.buildField(entityCls,it)).toArray(String[]::new));
From 0d77f3b75f1b89e8bb67b43090a6e3d47f18012a Mon Sep 17 00:00:00 2001
From: xuejike <245674286@qq.com>
Date: Wed, 6 Jan 2021 14:25:42 +0800
Subject: [PATCH 14/17] =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/github/xuejike/query/core/JLambdaQuery.java | 4 ++--
.../main/java/com/github/xuejike/query/core/JQuerys.java | 2 +-
.../java/com/github/xuejike/query/core/base/BaseDao.java | 8 +++++++-
.../java/com/github/xuejike/query/core/base/MapDao.java | 4 ++--
.../com/github/xuejike/query/core/config/DaoFactory.java | 2 +-
.../github/xuejike/query/http/client/HttpClientDao.java | 7 ++++++-
.../xuejike/query/http/client/HttpClientFactory.java | 2 +-
.../java/com/github/xuejike/query/mongo/MongoDao.java | 5 +++--
.../com/github/xuejike/query/mongo/MongoDaoFactory.java | 2 +-
.../github/xuejike/query/mybatisplus/MyBatisPlusDao.java | 5 +++--
.../xuejike/query/mybatisplus/MyBatisPlusDaoFactory.java | 2 +-
11 files changed, 28 insertions(+), 15 deletions(-)
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JLambdaQuery.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JLambdaQuery.java
index 4fd5ea7..5fd4297 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JLambdaQuery.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JLambdaQuery.java
@@ -15,9 +15,9 @@
* @date 2020/12/18
*/
public class JLambdaQuery extends BaseNestedWhereQuery, JLambdaQuery> implements DaoCriteria , OrderCriteria, JLambdaQuery>, MapCriteria {
- private BaseDao daoCriteria;
+ private BaseDao daoCriteria;
- public JLambdaQuery(BaseDao daoCriteria) {
+ public JLambdaQuery(BaseDao daoCriteria) {
this.daoCriteria = daoCriteria;
if (daoCriteria != null){
((InjectionBaseQuery) daoCriteria).injectionBaseWhereQuery(this);
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
index 849d025..a37d660 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/JQuerys.java
@@ -18,7 +18,7 @@ public static JLambdaQuery lambdaQuery(Class entityCls){
for (DaoFactory factory : instance.getDaoFactoryList()) {
DaoSelect annotation = AnnotationUtil.getAnnotation(entityCls, DaoSelect.class);
if (factory.getDaoCls() == annotation.daoCls()){
- BaseDao daoCriteria = factory.createDao(entityCls);
+ BaseDao daoCriteria = factory.createDao(entityCls);
return new JLambdaQuery<>(daoCriteria);
}
}
diff --git a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java
index de2012c..e17ebe3 100644
--- a/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java
+++ b/lambda-query-core/src/main/java/com/github/xuejike/query/core/base/BaseDao.java
@@ -19,7 +19,7 @@
* @author xuejike
* @date 2020/12/28
*/
-public abstract class BaseDao