mybatis in语句不能大于1000的问题及解决

 更新时间:2023年11月03日 10:29:07   作者:不如递归  
这篇文章主要介绍了mybatis in语句不能大于1000的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java开发中会出现一种情况,就是使用mybatis 的in语句的时候,in语句里面的数组大小不能大于1000.

通过以下方法解决

对于一个List<String> ids 大小大于1000的list而言

使用getSumArrayList方法,获取List<List<String>> 对象

List<List<String>> idParams = shareEpdService.getSumArrayList(idParam);
	    	Map<String, Object> mapNew = new HashMap<>();
	    	mapNew.put("ids", idParams );
	    	settlementCostMapper.submitDataByCondition(mapNew)

调用mybatis的方法

做如下处理:

<update id="submitDataByCondition">
		UPDATE 表名 SET STATE=1 WHERE STATE IN (-1,0) and 
		 (
                <foreach collection="ids" item="idsItem" separtor="or">
                	id  in
                	<foreach collection="idsItem" item="id" open="(" separator="," close=")">
                   		#{id}
                	</foreach>
                </foreach>
          )
	</update>
	

getSumArrayList方法

如下:

public <T>  List<List<T>> getSumArrayList(List<T> list){
        List<List<T>> objectlist = new ArrayList<>();
        int iSize = list.size()/1000;
        int iCount = list.size()%1000;
        for(int i=0;i<=iSize;i++){
            List<T> newObjList = new ArrayList<>();
            if(i==iSize){
                for(int j =i*1000;j<i*1000+iCount;j++ ){
                    newObjList.add(list.get(j));
                }
            }else{
                for(int j =i*1000;j<(i+1)*1000;j++ ){
                    newObjList.add(list.get(j));
                }
            }
            if(newObjList.size()>0){
                objectlist.add(newObjList);
            }
        }
        return objectlist;
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL中UPDATE语句使用的实例教程

    MySQL中UPDATE语句使用的实例教程

    这篇文章主要介绍了MySQL中UPDATE语句使用的实例教程,包括UPDATE的使用中所容易引起的性能问题的分析,需要的朋友可以参考下
    2015-11-11
  • MySQL的几种分页方式,你知道几种方式

    MySQL的几种分页方式,你知道几种方式

    这篇文章主要介绍了MySQL的几种分页方式,需要的朋友可以参考下
    2023-06-06
  • MySQL深入详解delete与Truncate及drop的使用区别

    MySQL深入详解delete与Truncate及drop的使用区别

    对于drop、truncate和delete虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,下面这篇文章主要给大家介绍了关于mysql中drop、truncate与delete区别的相关资料,需要的朋友可以参考下
    2022-07-07
  • mysql5.1.26安装配置方法详解

    mysql5.1.26安装配置方法详解

    这篇文章主要为大家详细介绍了mysql安装配置方法,图文详解MySQL5.1.26安装步骤,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • MySQL的源码安装及使用UDFs进行数据自动更新的教程

    MySQL的源码安装及使用UDFs进行数据自动更新的教程

    UDFs即是MySQL的用户自定义函数的缩写,配合触发器可以自动更新Memcached与MySql的数据,这里我们就来总结一下MySQL的源码安装及使用UDFs进行数据自动更新的教程:
    2016-07-07
  • MySQL连表更新实战案例及常见错误

    MySQL连表更新实战案例及常见错误

    更新数据是使用数据库时最重要的任务之一,下面这篇文章主要介绍了MySQL连表更新实战案例及常见错误的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • mysql 数据表中查找重复记录

    mysql 数据表中查找重复记录

    以下sql语句可以实现查找出一个表中的所有重复的记录
    2009-07-07
  • mysql中url时区的陷阱该如何规避详解

    mysql中url时区的陷阱该如何规避详解

    最近在工作中发现一个问题,是关于mysql中url时区的,发现这个陷阱如果大家不注意可能都会遇到,所以给大家总结下,这篇文章主要给大家介绍了关于mysql中url时区的陷阱该如何规避的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • MySQL保证数据不丢失的方案详解

    MySQL保证数据不丢失的方案详解

    MySQL作为一个存储数据的产品,怎么确保数据的持久性和不丢失才是最重要的,感兴趣的可以跟随本文一探究竟,文中通过图文结合给大家讲解的非常详细,需要的朋友快来跟着小编一起来学习吧
    2023-12-12
  • 解决MySQl查询不区分大小写的方法讲解

    解决MySQl查询不区分大小写的方法讲解

    今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04

最新评论