• Mybatis批量插入,是否能够返回id列表


    第1次代码
    void batchAdd(List<Photo> list);
    <insert id="batchAdd"   parameterType="java.util.List" keyProperty="id" useGeneratedKeys="true">
    		insert into
    		photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
    		values<foreach item="item" index="index" separator="," collection="list">
    			(#{item.bizid},#{item.cover},#{item.sort},#{item.url},#{item.name},#{item.remark},#{item.status},#{item.type},now(),now())
    		</foreach>
    	</insert>


    报错
    Error getting generated key or setting result to parameter object.
    org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]
    Caused by: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]


    第2次代码
    <insert id="batchAdd"   parameterType="java.util.List">
    	 <selectKey resultType="long" keyProperty="id" order="AFTER">  
            SELECT  
            LAST_INSERT_ID()  
        </selectKey>  
    		insert into
    		photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
    		values<foreach item="item" index="index" separator="," collection="list">
    			(#{item.bizid},#{item.cover},#{item.sort},#{item.url},#{item.name},#{item.remark},#{item.status},#{item.type},now(),now())
    		</foreach>
    </insert>


      批量插入成功了,但是id是null


      第3次代码
      Map map = new HashMap();
    map.put("list", toAddPhotoList);

    void batchAdd2(Map map);
    <insert id="batchAdd2" keyProperty="id" useGeneratedKeys="true">	
    		insert into
    		photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
    		values<foreach item="item" index="index" separator="," collection="list">
    			(#{item.bizid},#{item.cover},#{item.sort},#{item.url},#{item.name},#{item.remark},#{item.status},#{item.type},now(),now())
    		</foreach>
    	</insert>


      批量插入成功了,但是id是null
      
      在解决这个问题的过程中,我最初想实现“批量插入即可,心里默认为和插入1个一样,会有id”,
     后来为了“批量插入也要返回主键id”,最后我发现,"这是不能实现的"。
     
       mysql底层,insert values批量插入,返回的是“个数”。
       目前,不知道怎么去证实我的猜测。
       
       最后,附上单个插入的sql
       <insert id="add" keyProperty="id" useGeneratedKeys="true">
    		insert into photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
    		values(#{bizid},#{cover},#{sort},#{url},#{name},#{remark},#{status},#{type},now(),now())
    	</insert>

  • 相关阅读:
    SpringBoot多数据源启动器
    数据结构模拟器
    mysql5.7查询今天、昨天、本周、上周、本月、上月数据
    SpringBoot项目本地可以发送邮件,部署到阿里云服务器发送邮件失败的解决方法
    Centos7搭建Maven私服-Nexus3.19.1-01
    Linux中部署jar包并指定日志输出文件
    ThreadLocal是什么?谈谈你对他的理解
    leetcode-双指针遍历
    不要再纠结css/js/html有没有必要放在WEB-INF下了
    数据库的表的字段名称与实体类(pojo)不对应解决方案
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462665.html
Copyright © 2020-2023  润新知