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

This commit is contained in:
hubin 2021-08-14 12:38:42 +08:00
parent 766b8bc143
commit b988866c3d
17 changed files with 36 additions and 30 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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 条件查询全部记录

View File

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

View File

@ -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
*/

View File

@ -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);
}

View File

@ -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()));
}

View File

@ -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));
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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());

View File

@ -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());

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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();
}

View File

@ -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);
}

View File

@ -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 -> {