查询数据库最大行数限制探究
1. 问题背景
最近,在对项目中的机构部门表的数据访问层代码进行单元测试时,甚是神奇地发现了这个指标——查询数据库最大行数限制。
首先,使用查询总行数语句查出该表的总行数为:10768
。
SELECT
count(1)
FROM department_define;
单元测试:
@Test
public void test() {
List<DepartmentDefinePO> departmentDefinePOList = baseDataMapper.listDepartmentDefinePO(null);
log.info("departmentDefinePOList, size={}", departmentDefinePOList.size());
Assert.isTrue(departmentDefinePOList.size() == 10768, "查询全量机构数量不对!");
}
测试结果如下:
... INFO ... departmentDefinelIST, size=10000
java.lang.IllegalArgumentException: 查询全量机构数量不对!
...
看到这里,那么问题来了:数据库里面明明有 10768
条数据,为什么却只查出来 10000
条呢?
2. 问题分析
数据访问层的框架是 mybatis
,因此,肯定与 mybatis
有关。因此,打开项目中的 maven
插件,鼠标点击 Show Dependencies...
(展示依赖的),键盘依次输入 Ctrl + F
、mybatis
,发现有个 XXX-mybatis-plugin
,展开 External Libraries
,键盘输入 mybatis-plugin
,发现这个包的目录结构如下:
...
|-config
|-XxxMybatisPluginAutoConfiguration.class
|-XxxMybatisPluginConfigurationRebinder.class
|-intercepter
|-StatementHandlerInterceptor.class
(1) XxxMybatisPluginAutoConfiguration.class
package com.example.mybatisplugin.config;
import com.example.mybatisplugin.interceptor.StatementHandlerInterceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty