24282 1 năm trước cách đây
mục cha
commit
6d927fa6ed

+ 21 - 3
my-test/src/main/java/org/example/join/JoinMapper.java

@@ -18,18 +18,36 @@ public interface JoinMapper {
      * 列表
      */
     @SelectProvider(type = JoinSqlProvider.class, method = "getSql")
-    List<Map<String, Object>> list(@Param(ISqlRunner.SQL) Sql<?> sql);
+    List<Map<String, Object>> listMap(@Param(ISqlRunner.SQL) Sql<?> sql);
 
     /**
      * 分页
      */
     @SelectProvider(type = JoinSqlProvider.class, method = "getSql")
-    Page<Map<String, Object>> page(@Param(ISqlRunner.SQL) Sql<?> sql, @Param(ISqlRunner.PAGE) Page<?> page);
+    Page<Map<String, Object>> pageMap(@Param(ISqlRunner.SQL) Sql<?> sql, @Param(ISqlRunner.PAGE) Page<?> page);
 
     /**
      * 单条纪录
      */
     @SelectProvider(type = JoinSqlProvider.class, method = "getSql")
-    Map<String, Object> one(@Param(ISqlRunner.SQL) Sql<?> sql);
+    Map<String, Object> oneMap(@Param(ISqlRunner.SQL) Sql<?> sql);
+
+    /**
+     * 列表
+     */
+    @SelectProvider(type = JoinSqlProvider.class, method = "getSql")
+    List<Object> listObj(@Param(ISqlRunner.SQL) Sql<?> sql);
+
+    /**
+     * 分页
+     */
+    @SelectProvider(type = JoinSqlProvider.class, method = "getSql")
+    Page<Object> pageObj(@Param(ISqlRunner.SQL) Sql<?> sql, @Param(ISqlRunner.PAGE) Page<?> page);
+
+    /**
+     * 单条纪录
+     */
+    @SelectProvider(type = JoinSqlProvider.class, method = "getSql")
+    Object oneObj(@Param(ISqlRunner.SQL) Sql<?> sql);
 
 }

+ 4 - 0
my-test/src/main/java/org/example/join/sql/JoinSqlProvider.java

@@ -102,6 +102,10 @@ public class JoinSqlProvider {
             sqlBuilder.append(SqlConstant.ORDER_BY).append(orderBy);
         }
 
+        if (StrUtil.isNotEmpty(sql.limit)) {
+            sqlBuilder.append(SqlConstant.LIMIT).append(sql.limit);
+        }
+
         return sqlBuilder.toString();
     }
 

+ 1 - 0
my-test/src/main/java/org/example/join/sql/Sql.java

@@ -20,6 +20,7 @@ public class Sql<R> {
 
     protected Boolean distinct = false;
     protected Boolean logic = false;
+    protected String limit = null;
 
     protected Sql(Class<R> resultCls) {
         this.resultCls = resultCls;

+ 32 - 5
my-test/src/main/java/org/example/join/sql/SqlExecute.java

@@ -1,13 +1,14 @@
 package org.example.join.sql;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.convert.Convert;
 import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.example.join.JoinMapper;
 
+import java.util.Date;
 import java.util.List;
-import java.util.Map;
 
 @AllArgsConstructor
 public class SqlExecute<R> {
@@ -17,12 +18,29 @@ public class SqlExecute<R> {
     private final Sql<R> sql;
 
     public List<R> list() {
-        List<Map<String, Object>> result = mapper.list(sql);
+        List<?> result;
+
+        if (String.class.isAssignableFrom(sql.resultCls)
+                || Number.class.isAssignableFrom(sql.resultCls)
+                || Date.class.isAssignableFrom(sql.resultCls)) {
+            result = mapper.listObj(sql);
+        } else {
+            result = mapper.listMap(sql);
+        }
+
         return BeanUtil.copyToList(result, sql.resultCls);
     }
 
     public Page<R> page(Page<?> page) {
-        Page<Map<String, Object>> result = mapper.page(sql, page);
+        Page<?> result;
+
+        if (String.class.isAssignableFrom(sql.resultCls)
+                || Number.class.isAssignableFrom(sql.resultCls)
+                || Date.class.isAssignableFrom(sql.resultCls)) {
+            result = mapper.pageObj(sql, page);
+        } else {
+            result = mapper.pageMap(sql, page);
+        }
 
         Page<R> rPage = new Page<>();
         rPage.setPages(result.getPages());
@@ -34,8 +52,17 @@ public class SqlExecute<R> {
     }
 
     public R one() {
-        Map<String, Object> result = mapper.one(sql);
-        return BeanUtil.toBean(result, sql.resultCls);
+        Object result;
+
+        if (String.class.isAssignableFrom(sql.resultCls)
+                || Number.class.isAssignableFrom(sql.resultCls)
+                || Date.class.isAssignableFrom(sql.resultCls)) {
+            result = mapper.oneObj(sql);
+        } else {
+            result = mapper.oneMap(sql);
+        }
+
+        return Convert.convert(sql.resultCls, result);
     }
 
 }

+ 11 - 0
my-test/src/main/java/org/example/join/sql/Where.java

@@ -1,6 +1,7 @@
 package org.example.join.sql;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import org.example.join.domain.QueryColumn;
 import org.example.join.domain.QueryConditionOrder;
 
@@ -48,4 +49,14 @@ public class Where<R> extends SqlExecute<R> {
         return this;
     }
 
+    public Where<R> limit(Integer number) {
+        sql.limit = StringPool.EMPTY + number;
+        return this;
+    }
+
+    public Where<R> limit(Integer number, Integer number2) {
+        sql.limit = StringPool.EMPTY + number + StringPool.COMMA + number2;
+        return this;
+    }
+
 }

+ 1 - 0
my-test/src/main/java/org/example/join/util/SqlConstant.java

@@ -11,6 +11,7 @@ public interface SqlConstant {
     String RIGHT_JOIN = " right join ";
     String GROUP_BY = " group by ";
     String ORDER_BY = " order by ";
+    String LIMIT = " limit ";
     String AND = " and ";
     String OR = " or ";
     String ON = " on ";

+ 12 - 19
my-test/src/test/java/MySpringBootTest.java

@@ -11,11 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.List;
-
-import static org.example.join.domain.QueryMethods.concat;
-import static org.example.join.domain.QueryMethods.now;
-
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = DromaraApplication.class)
 public class MySpringBootTest {
@@ -39,25 +34,20 @@ public class MySpringBootTest {
     @Test
     public void testCache() {
 
-        List<SysDept> list = Sql.create(SysDept.class)
+        SysDept list = Sql.create(SysDept.class)
                 //.logic()
                 .select(
-                        //dept_id,
-                        //abs(parent_id).as(SysDept::getUpdateTime),
-                        //replace(dept_id, "2", "3"),
-                        now(),
-                        concat("@", "1"),
-                        concat("777", "555").add(777).as(SysDept::getDeptId),
-                        concat(dept_id, parent_id)
-                        //concat(dept_id,"sdasdsa"),
-                        //dateFormat(now(), "%Y%m"),
-                        //ifNull("2", "2")
+                        parent_id,
+                        tenant_id,
+                        dept_id
                 )
                 .from(sys_dept)
                 .leftJoin(sys_user).on(user_id.eq(dept_id))
                 .where(
-                        create_by.eq(777),
-                        create_by.ne(concat("777", "555").add(777)).and(concat("777", "555").eq("sss"))
+                        //dept_id.eq(100)
+                        //concat("777", "555").eq(create_by),
+                        //create_by.eq(concat("777", "555").add(777)).and(concat("777", "555").eq("sss")),
+                        //create_by.ne(98),
                         //create_by.gt(98),
                         //create_by.lt(98),
                         //create_by.ge(98),
@@ -75,7 +65,10 @@ public class MySpringBootTest {
                         //create_by.in(1, 2, 3, 4),
                         //create_by.notIn(1, 2, 3, 4)
                 )
-                .list();
+                .orderByAsc(dept_id)
+                .groupBy(dept_id)
+                .limit(1)
+                .one();
 
         System.out.println(JSONObject.toJSONString(list));