mybatis批量foreach的使用

摘要:
=0“˃whereidin#{id}动态sql支持list.size()。如果不添加判断,当传入列表为空时,动态sql语句为“select*from`user`whereidin()”,这将导致执行错误。

  最近在使用mybaits的过程中经常会碰到批量插入、更新的需求,经过查询资料和调试,现在总结如下(数据库mysql、oracle)

  一、批量更新

    1、oracle数据库

<update   parameterType="list">
	<foreach collection="list" item="item" index="index" separator=";" open="begin" close=";end;" >
		update t_repay_plan a set 
			a.repay_day = #{item.repayDay},
			modify_date = sysdate,
			modifier = #{currUser}
		where a.lr_id = #{item.lrId} 
	</foreach>
</update>

    2、mysql数据库

     mysql数据库需要注意一点,数据库连接必须配置:&allowMultiQueries=true

     例如:jdbc:mysql://localhost/test?characterEncoding=UTF8&allowMultiQueries=true

      

<update   parameterType="list">
        <foreach collection="list" item="item" index="index" separator=";" open="" close=";">
            update t_repay_plan a set 
                   a.repay_day = #{item.repayDay},
                   modify_date = sysdate,
                   modifier = #{currUser}
                 where a.lr_id = #{item.lrId}
        </foreach>
    </update>

  二、批量插入

  1、oracle数据库

<select   parameterType="list" >
        insert into t_repay_plan (RP_ID,LR_ID,ORDER_PERIODS)
        <foreach collection="list" item="item" index="index" separator="union all">
            (select
                #{item.rpId},
                #{item.lrId},
                #{item.orderPeriods}
            from dual)
        </foreach>                 
</select>

   2、mysql数据库

<insert   parameterType="list">
        INSERT into `user` (user_name,user_age,user_address) VALUES 
        <foreach collection="list" item="item" index="index" separator="," open="" close="">
            (#{item.user_name},#{item.user_age},#{item.user_address})
        </foreach>
    </insert>

   三、查询的时候用于

    1、mysql数据库

<select    resultType="user">
        select * from `user` 
        <if test="list!=null and list.size()!=0">
            where id in
            <foreach collection="list" item="id" index="index" separator="," open="(" close=")">
                #{id}
            </foreach>
        </if>
    </select>

动态的sql支持list.size()这种写法,如果不加<if>的判断,当传入的list为空时,动态的sql语句为“select * from `user`   where id in ()”,执行会出错。

免责声明:文章转载自《mybatis批量foreach的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jquery-tmpl 插件SSH批量部署服务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决服务器断电导致mysql数据库无法启动

1.找到mysql数据库目录下的*.ini这个配置文件2.复制配置文件到桌面,当作备份3.打开配置文件,在配置文件里加上innodb_force_recovery=6这句,保存,然后重启服务器4重启完成后,关掉mysql服务,再把桌面备份的配置文件覆盖回去,重启服务器...

postgresql-slony-I同步复制配置步骤

主数据库: 172.16.254.21 端口:5432 从数据库: 172.16.254.22 端口:5432 步骤1:主从均安装slon apt-get install slon-bin 步骤2:主从数据库配置权限,创建语言。 在主数据库中   vi /etc/postgresql/8.3/node/pg_hba.conf 添加一条记录    host ...

开发者使用JasperReport——通过数据源生成报表

前言 前两篇都是介绍了如何查询数据库,但是都是通过报表模版跟数据库进行交互的,也就是说我们的查询语句和参数的定义都写死在模版里面了,所以有时候会不太方便,所以今天就来跟大家介绍下通过Servlet与数据库进行交互,模板只负责显示。 正题 跟之前的一样,我们要生成报表需要以下几个步骤: 1.引入jar包,请看《静态文本报表》 。 2.新建报表模版: 由于...

使用Hibernate

1、Hibernate框架设计原理 1)设计原理 Hibernate采用ORM思想对JDBC进行封装,Hibernate框架是ORM思想的一种实现,解决对象和数据库数据映射问题 Hibernate提供一系列API,允许我们直接访问实体对象,然后根据ORM映射关系,转换成SQL去执行,从而达到访问数据库的目的。 2)ORM思想 ORM(ObjectRela...

C# List分页

假设你每页10条数据当前是第3页 跳到第4页则:List.Skip((4-1)*10).Take(10) 本文来自SunShine,转载请标明出处: http://do.jhost.cn/sunshine/ReadNews?action=read&id=227...

【Mybatis-Plus】使用updateById()、update()将字段更新为null或者空

问题背景: 最近测试同学给我提了个bug,字段不能置空,我查看了下项目配置发现是字段级别被设置为NOT_EMPTY导致的。 mybatis-plus FieldStrategy 有三种策略: 1.IGNORED:0 忽略 2.NOT_NULL:1 非 NULL,默认策略 3.NOT_EMPTY:2 非空 而默认更新策略是NOT_NULL:非 NULL;即通...