Browse Source

fix github issues/2931 解决结果集大于 Integer 异常问题

hubin 3 năm trước cách đây
mục cha
commit
b988866c3d
17 tập tin đã thay đổi với 36 bổ sung30 xóa
  1. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/assist/ISqlRunner.java
  2. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectCount.java
  3. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/mapper/BaseMapper.java
  4. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/package-info.java
  5. 0 3
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ReflectionKit.java
  6. 2 2
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/activerecord/Model.java
  7. 1 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/ChainQuery.java
  8. 2 2
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/IService.java
  9. 1 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlHelper.java
  10. 2 2
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlRunner.java
  11. 2 2
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/ActiveRecordTest.java
  12. 1 1
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2Delete1Eq1Test.java
  13. 8 2
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserMapperTest.java
  14. 1 1
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/SqlRunnerTest.java
  15. 3 0
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/H2UserMapper.java
  16. 7 7
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/SelectCountDistinctTest.java
  17. 2 2
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/sharding/ShardingTest.java

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/assist/ISqlRunner.java

@@ -51,7 +51,7 @@ public interface ISqlRunner {
 
     Object selectObj(String sql, Object... args);
 
-    int selectCount(String sql, Object... args);
+    long selectCount(String sql, Object... args);
 
     Map<String, Object> selectOne(String sql, Object... args);
 

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectCount.java

@@ -35,6 +35,6 @@ public class SelectCount extends AbstractMethod {
         String sql = String.format(sqlMethod.getSql(), sqlFirst(), sqlCount(), tableInfo.getTableName(),
             sqlWhereEntityWrapper(true, tableInfo), sqlComment());
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
-        return this.addSelectMappedStatementForOther(mapperClass, getMethod(sqlMethod), sqlSource, Integer.class);
+        return this.addSelectMappedStatementForOther(mapperClass, getMethod(sqlMethod), sqlSource, Long.class);
     }
 }

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/mapper/BaseMapper.java

@@ -186,7 +186,7 @@ public interface BaseMapper<T> extends Mapper<T> {
      *
      * @param queryWrapper 实体对象封装操作类(可以为 null)
      */
-    Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
+    Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
 
     /**
      * 根据 entity 条件,查询全部记录

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/package-info.java

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 /**
- * 只放mybatis-plus核心代码,不涉及数据库,不添加spring等
+ * 只放mybatis-plus核心代码
  *
  * @author yuxiaobin
  * @since 2018-02-07

+ 0 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ReflectionKit.java

@@ -15,8 +15,6 @@
  */
 package com.baomidou.mybatisplus.core.toolkit;
 
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
 import org.springframework.core.GenericTypeResolver;
 
 import java.lang.reflect.AccessibleObject;
@@ -39,7 +37,6 @@ import static java.util.stream.Collectors.toMap;
  * @since 2016-09-22
  */
 public final class ReflectionKit {
-    private static final Log logger = LogFactory.getLog(ReflectionKit.class);
     /**
      * class field cache
      */

+ 2 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/activerecord/Model.java

@@ -223,12 +223,12 @@ public abstract class Model<T extends Model<?>> implements Serializable {
      *
      * @param queryWrapper 实体对象封装操作类(可以为 null)
      */
-    public Integer selectCount(Wrapper<T> queryWrapper) {
+    public long selectCount(Wrapper<T> queryWrapper) {
         Map<String, Object> map = CollectionUtils.newHashMapWithExpectedSize(1);
         map.put(Constants.WRAPPER, queryWrapper);
         SqlSession sqlSession = sqlSession();
         try {
-            return SqlHelper.retCount(sqlSession.<Integer>selectOne(sqlStatement(SqlMethod.SELECT_COUNT), map));
+            return SqlHelper.retCount(sqlSession.<Long>selectOne(sqlStatement(SqlMethod.SELECT_COUNT), map));
         } finally {
             closeSqlSession(sqlSession);
         }

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/query/ChainQuery.java

@@ -63,7 +63,7 @@ public interface ChainQuery<T> extends ChainWrapper<T> {
      *
      * @return count
      */
-    default Integer count() {
+    default Long count() {
         return SqlHelper.retCount(getBaseMapper().selectCount(getWrapper()));
     }
 

+ 2 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/IService.java

@@ -267,7 +267,7 @@ public interface IService<T> {
      *
      * @see Wrappers#emptyWrapper()
      */
-    default int count() {
+    default long count() {
         return count(Wrappers.emptyWrapper());
     }
 
@@ -276,7 +276,7 @@ public interface IService<T> {
      *
      * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
      */
-    default int count(Wrapper<T> queryWrapper) {
+    default long count(Wrapper<T> queryWrapper) {
         return SqlHelper.retCount(getBaseMapper().selectCount(queryWrapper));
     }
 

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlHelper.java

@@ -111,7 +111,7 @@ public final class SqlHelper {
      * @param result ignore
      * @return int
      */
-    public static int retCount(Integer result) {
+    public static long retCount(Long result) {
         return (null == result) ? 0 : result;
     }
 

+ 2 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlRunner.java

@@ -189,10 +189,10 @@ public class SqlRunner implements ISqlRunner {
     }
 
     @Override
-    public int selectCount(String sql, Object... args) {
+    public long selectCount(String sql, Object... args) {
         SqlSession sqlSession = sqlSession();
         try {
-            return SqlHelper.retCount(sqlSession.<Integer>selectOne(COUNT, sqlMap(sql, args)));
+            return SqlHelper.retCount(sqlSession.<Long>selectOne(COUNT, sqlMap(sql, args)));
         } finally {
             closeSqlSession(sqlSession);
         }

+ 2 - 2
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/ActiveRecordTest.java

@@ -108,7 +108,7 @@ class ActiveRecordTest {
     @Order(6)
     void testSelectCount() {
         H2Student student = new H2Student();
-        int count = new H2Student().selectCount(new QueryWrapper<>(student));
+        long count = new H2Student().selectCount(new QueryWrapper<>(student));
         LOGGER.info("count:{}", count);
         Assertions.assertTrue(count > 1);
     }
@@ -176,7 +176,7 @@ class ActiveRecordTest {
         );
         Assertions.assertNotNull(h2Student);
         LambdaQueryWrapper<H2Student> queryWrapper = new QueryWrapper<H2Student>().lambda().ge(H2Student::getAge, 1);
-        int userCount = student.selectCount(queryWrapper.comment("getStuCount"));
+        long userCount = student.selectCount(queryWrapper.comment("getStuCount"));
         Assertions.assertEquals(1, userCount);
         List<H2Student> h2StudentList = student.selectList(queryWrapper.comment("getStuList"));
         Assertions.assertEquals(1, h2StudentList.size());

+ 1 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2Delete1Eq1Test.java

@@ -77,7 +77,7 @@ class H2Delete1Eq1Test extends BaseTest {
     void delete() {
         logicDeleteMapper.delete(new QueryWrapper<>());
         defaultMapper.delete(new QueryWrapper<>());
-        Assertions.assertEquals(0, (int) logicDeleteMapper.selectCount(new QueryWrapper<>()));
+        Assertions.assertEquals(0, logicDeleteMapper.selectCount(new QueryWrapper<>()));
         List<H2User> userList = queryByName(null);
         System.out.println(userList.size());
         Assertions.assertNotEquals(0, userList.size());

+ 8 - 2
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserMapperTest.java

@@ -93,7 +93,7 @@ class H2UserMapperTest extends BaseTest {
         Assertions.assertTrue(CollectionUtils.isNotEmpty(h2UserList));
 
         // 查询总数
-        int count = userMapper.selectCount(wrapper.clone());
+        long count = userMapper.selectCount(wrapper.clone());
         Assertions.assertTrue(count > 1);
 
         // 批量删除
@@ -188,7 +188,7 @@ class H2UserMapperTest extends BaseTest {
         );
         Assertions.assertNotNull(h2User);
         LambdaQueryWrapper<H2User> queryWrapper = new QueryWrapper<H2User>().lambda().ge(H2User::getAge, 1);
-        int userCount = userMapper.selectCount(queryWrapper.comment("getUserCount"));
+        long userCount = userMapper.selectCount(queryWrapper.comment("getUserCount"));
         Assertions.assertEquals(1, userCount);
         List<H2User> h2UserList = userMapper.selectList(queryWrapper.comment("getUserList"));
         Assertions.assertEquals(1, h2UserList.size());
@@ -208,4 +208,10 @@ class H2UserMapperTest extends BaseTest {
         userMapper.testPage1(new H2User(), page);
         userMapper.testPage2(page, new H2User());
     }
+
+    @Test
+    void testCountLong(){
+        Long count = userMapper.selectCountLong();
+        System.out.println(count);
+    }
 }

+ 1 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/SqlRunnerTest.java

@@ -46,7 +46,7 @@ class SqlRunnerTest {
     @Test
     @Order(3)
     void testSelectCount(){
-        int count = SqlRunner.db().selectCount("select count(1) from h2student");
+        long count = SqlRunner.db().selectCount("select count(1) from h2student");
         Assertions.assertTrue(count > 0);
         count = SqlRunner.db().selectCount("select count(1) from h2student where id > {0}",0);
         Assertions.assertTrue(count > 0);

+ 3 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/mapper/H2UserMapper.java

@@ -102,4 +102,7 @@ public interface H2UserMapper extends SuperMapper<H2User> {
 
     @Select("select * from h2user")
     IPage<H2User> testPage2(@Param(value = "user") Page page, @Param(value = "page") H2User h2User);
+
+    @Select("select count(*) from h2user")
+    Long selectCountLong();
 }

+ 7 - 7
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/SelectCountDistinctTest.java

@@ -52,7 +52,7 @@ class SelectCountDistinctTest {
                 .or()
                 .eq("test_str", "test")
                 .first("/*Force Master*/");
-        int count = commonDataMapper.selectCount(distinct);
+        long count = commonDataMapper.selectCount(distinct);
         Assertions.assertEquals(1, count);
     }
 
@@ -62,7 +62,7 @@ class SelectCountDistinctTest {
         QueryWrapper<CommonData> distinct = new QueryWrapper<>();
         distinct.select("distinct test_int, test_str");
         distinct.eq("test_int", 25).or().eq("test_str", "test");
-        int count = commonDataMapper.selectCount(distinct);
+        long count = commonDataMapper.selectCount(distinct);
         Assertions.assertEquals(1, count);
     }
 
@@ -72,7 +72,7 @@ class SelectCountDistinctTest {
         QueryWrapper<CommonLogicData> distinct = new QueryWrapper<>();
         distinct.select("distinct test_int");
         distinct.eq("test_int", 25).or().eq("test_str", "test");
-        int count = commonLogicMapper.selectCount(distinct);
+        long count = commonLogicMapper.selectCount(distinct);
         Assertions.assertEquals(1, count);
     }
 
@@ -91,7 +91,7 @@ class SelectCountDistinctTest {
     void testLogicCountDistinctUseLambda() {
         LambdaQueryWrapper<CommonLogicData> lambdaQueryWrapper =
             new QueryWrapper<CommonLogicData>().select("distinct test_int").lambda();
-        int count = commonLogicMapper.selectCount(lambdaQueryWrapper);
+        long count = commonLogicMapper.selectCount(lambdaQueryWrapper);
         Assertions.assertEquals(1, count);
     }
 
@@ -100,7 +100,7 @@ class SelectCountDistinctTest {
     void testCountDistinctUseLambda() {
         LambdaQueryWrapper<CommonData> lambdaQueryWrapper =
             new QueryWrapper<CommonData>().select("distinct test_int, test_str").lambda();
-        int count = commonDataMapper.selectCount(lambdaQueryWrapper);
+        long count = commonDataMapper.selectCount(lambdaQueryWrapper);
         Assertions.assertEquals(1, count);
     }
 
@@ -109,7 +109,7 @@ class SelectCountDistinctTest {
     void testLogicSelectCountWithoutDistinct() {
         QueryWrapper<CommonLogicData> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("test_int", 25).or().eq("test_str", "test");
-        int count = commonLogicMapper.selectCount(queryWrapper);
+        long count = commonLogicMapper.selectCount(queryWrapper);
         Assertions.assertEquals(2, count);
     }
 
@@ -118,7 +118,7 @@ class SelectCountDistinctTest {
     void testCountDistinctWithoutDistinct() {
         QueryWrapper<CommonData> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("test_int", 25).or().eq("test_str", "test");
-        int count = commonDataMapper.selectCount(queryWrapper);
+        long count = commonDataMapper.selectCount(queryWrapper);
         Assertions.assertEquals(2, count);
     }
 

+ 2 - 2
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/sharding/ShardingTest.java

@@ -46,8 +46,8 @@ public class ShardingTest extends BaseDbTest<ShardingOrderMapper> {
             int affectedRow = m.update(entity, wrapper);
             assertThat(affectedRow).as("更新成功").isEqualTo(1);
 
-            affectedRow = m.selectCount(wrapper);
-            assertThat(affectedRow).as("查询记录数").isEqualTo(1);
+            long row = m.selectCount(wrapper);
+            assertThat(row).as("查询记录数").isEqualTo(1);
         });
 
         doTest(m -> {