java切分查询数据库表
在实际应用中,我经常用到遇到根据单号查询,单号又是批量如1000个单号,直接1000个in子查询是不行的,子查询是用上限的。如果表中数据达到上百万以上。即使有单号字段有索引查询也是很慢。这时可以用切分。把1000个单号切分成,每300个去查询。这样会快很多。下面是demo。
1 /** 2 * 准备工作,插入数据,100000条记录。 3 */ 4 @Test 5 public void test11() { 6 for (int i = 0; i < 100000; i++) { 7 UserInfo userInfo = new UserInfo(); 8 //生成随机数单号(1到100000)。 9 Random random = new Random(); 10 int max = 100000; 11 int min = 1; 12 int s = random.nextInt(max) % (max - min + 1) + min; 13 14 userInfo.setAge(random.nextInt(90) + 10); 15 userInfo.setName("张三" + i); 16 userInfo.setBillCode("" + s); 17 userInfoMapper.insertSelective(userInfo); 18 } 19 } 20 21 /** 22 * 查询数据,如查询1000个单号,每300个拆分。最后把结果集合并。 23 */ 24 @Test 25 public void test12() { 26 //结果集 27 List<UserInfo> result=Lists.newArrayList(); 28 List<String> listSearch = Lists.newArrayList(); 29 for (int i = 1; i <= 1000; i++) { 30 listSearch.add(i+""); 31 } 32 //按每300个拆分。只需查询3次数据库,用in查询。 33 List<List<String>> listOne = Lists.partition(listSearch, 300); 34 for (List<String> one : listOne) { 35 UserInfoExample example=new UserInfoExample(); 36 example.createCriteria().andBillCodeIn(one); 37 List<UserInfo> oneUserInfo= userInfoMapper.selectByExample(example); 38 result.addAll(oneUserInfo); 39 } 40 //输出 41 for(UserInfo userInfo:result){ 42 System.out.println("显示:"+JSON.toJSONString(userInfo)); 43 } 44 }
输出:
源码下载地址:
链接:https://pan.baidu.com/s/1hFq9DefyFMKgrk06iJylXw
提取码:fx4o
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!