亲测有效!mybatis实现oracle数据库的批量更新操作!

需求

遇到一个mybatis批量更新oracle数据库的问题,在这里记录一下免得以后忘记。

具体实现

不多废话,直接上代码!

1.serviceImpl层

被我注释掉的部分是一开始写的单挑更新语句。对应mapper接口的updateUserHome方法。

	/**
	 * 批量更新用户首页信息
	 */
	public int updateUserPage(List<UserPagePO> list) {
		int count = userPageDao.updateBatch(list);
//		int count = 0;
//		for(int i=0;i<list.size();i++) {
//			Dto inDto = Dtos.newDto();
//			inDto.put("enable", list.get(i).getEnable());
//			inDto.put("userid", list.get(i).getUserid());
//			inDto.put("menuid", list.get(i).getMenuid());
//			count = userPageDao.updateUserHome(inDto);
//		}
		return count;
	}

2.Mapper接口

@Dao("UserPageDao")
public interface UserPageDao {
	
	int updateUserHome(Dto inDto);
	
	int updateBatch(List<UserPagePO> list);
	
}

3.对应xml文件

  1. 单条语句更新
<update id="updateUserHome" parameterType="UserPagePo">
	    update t_app_home 
	    <set>
			<if test="enable != null">
		          enable = #{enable, jdbcType=NUMERIC},  <!-- 导入人员 -->
			</if>
	    </set>
	    where userid = #{userid}
	    and menuid = #{menuid}
    </update>
  1. 批量更新
<update id="updateBatch"  parameterType="java.util.List">  
      <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
           update t_app_home
           <set>
               <if test="item.enable != null">
                   enable = #{item.enable,jdbcType=NUMERIC},
               </if>
           </set>
           where userid = #{item.userid,jdbcType=VARCHAR}
           and menuid = #{item.menuid,jdbcType=VARCHAR}
       </foreach>     
   </update>

特别需要注意:open=“begin” close=";end;" separator=";"这一句代码,千万不能写错!
大家在使用的时候把相应的字段换成自己的就行了,特别要字段问题,比如:#{item.enable,jdbcType=NUMERIC},假设字段根本不存在于表里面,肯定会报错的。经常会遇到本地库和测试库表字段不一样的问题,可能某位同事在测试库中把某个字段改了,你自己在本地测试的时候报错找bug找半天,最后发现是表里面根本没有这个字段!!!

  1. 至此,功能实现
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值