微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐