批量插入
void batchInsertBackup(List<UserRights> list);
<insert id ="batchInsertBackup" parameterType="java.util.List" >
insert into user_rights_backup
(id,supplier_id,user_id,rights_id,rules_id,
start_time,end_time,goods_no,has_num,type,
status,ctime,mtime,biz_type,first_type,
is_limit_time)
values
<foreach collection ="list" item="entityRecord" index= "index" separator =",">
(
#{entityRecord.id}, #{entityRecord.supplierId},#{entityRecord.userId},#{entityRecord.rightsId},#{entityRecord.rulesId},
#{entityRecord.startTime}, #{entityRecord.endTime}, #{entityRecord.goodsNo},#{entityRecord.hasNum},#{entityRecord.type},
#{entityRecord.status},#{entityRecord.ctime},#{entityRecord.mtime},#{entityRecord.bizType},#{entityRecord.firstType},
#{entityRecord.isLimitTime}
)
</foreach >
</insert > 批量删除源数据
void batchDelete(List<UserRights> list);
<delete id="batchDelete" parameterType="java.util.List" >
delete from user_rights where id in (
<foreach collection="list" item="entity" index= "index" separator=",">
#{entity.id}
</foreach>
)
</delete>

根据id,批量查询
List<UserRights> batchQuery(List<Long> idList);
<select id="batchQuery" resultMap="BaseResultMap" parameterType="java.util.List">
select
<include refid="base_column_list"/>
from user_rights
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item,jdbcType=BIGINT}
</foreach>
</select>

根据id,批量更新时间和状态
<update id="updateBatch" parameterType="java.util.List">
update user_rights
<trim prefix="set" suffixOverrides=",">
<trim prefix="status = case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.status}
</foreach>
</trim>
<trim prefix=" start_time = case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.startTime}
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id,jdbcType=BIGINT}
</foreach>
</update>

首先,mysql需要数据库连接配置&allowMultiQueries=true

jdbc:mysql://127.0.0.1:3306/mybank?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

oracle下支持执行多条语句,下面3个相同

<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";" >
update T_EMP_1
<set>
age = #{item.age}+1,name=#{item.name}
</set>
where id = #{item.id}
</foreach>
</update>
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close="end;" separator="" >
update T_EMP_1
<set>
age = #{item.age}+1,name=#{item.name}
</set>
where id = #{item.id};
</foreach>
</update>
<update id="batchUpdate" parameterType="java.util.List">
begin
<foreach collection="list" item="item" index="index" separator="" >
update T_EMP_1
<set>
age = #{item.age}+1,name=#{item.name}
</set>
where id = #{item.id};
</foreach>
end;
</update>

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况: 
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list 
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array 
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key

批量删除

<delete id="batchDeleteStudent" parameterType="List">
DELETE FROM STUDENT WHERE id IN
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>

批量更新 注意:oracle中 形如 update *** set *** where ** in(....) 这种语句 in所在的集合有条数限制 为1000条

<update id="batchUpdateStudent" parameterType="List">
UPDATE STUDENT SET name = "5566" WHERE id IN
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</update>
<update id="batchUpdateStudentWithMap" parameterType="Map" >
UPDATE STUDENT SET name = #{name} WHERE id IN
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>

批量插入  mysql和oracle不一样

mysql:
<insert id="batchInsertStudent" parameterType="java.util.List">
INSERT INTO STUDENT (id,name,sex,tel,address)
VALUES
<foreach collection="list" item="item" index="index" separator="," >
(#{item.id},#{item.name},#{item.sex},#{item.tel},#{item.address})
</foreach>
</insert>
oracle:
<insert id="insertBatch4Oracle" parameterType="List">
insert into aa(a,b)
<foreach collection="list" item="item" index="index" separator="union all" >
  select #{item.a},#{item.b} from dual
</foreach>
</insert>

Mybatis批量操作的更多相关文章

  1. mybatis批量操作-xml方式

    在实际项目中,我们一般都会用到批量insert.delete.update等操作,由于使用频率还是蛮高的,这里就做个简单的记录,供以后学习和参考. 批量insert 在数据库中,批量插入可以是多条in ...

  2. Mybatis 批量操作-删除、修改和查询

          批量操作的核心就是一次传入多个数据然后进行相关操作,增删改查中掌握其中一个,其它的就可以举一反三,触类旁通.它之所以执行效率高,是因为合并后日志量(MySQL的binlog和InnoDB的 ...

  3. MyBatis 批量操作、集合遍历-foreach

    在使用mybatis操作数据库时,经常会使用到批量插入.IN条件查询的情况,这时就难免要使用到foreach元素.下面一段话摘自mybatis官网: foreach 元素的功能是非常强大的,它允许你指 ...

  4. MyBatis批量操作报错:Parameter 'xxxList' not found. Available parameters are [list]

    问题背景: 在Dao中使用MyBatis进行查询操作,参数是传的一个List:studentNameList,但是在执行查询的时候报错,具体日志如下: com.chenzhou.base.mybati ...

  5. mybatis 批量操作增删改查

    在介绍批量操作之前,首先先介绍一个语法:foreach.可以说是,foreach是整个批量操作的灵魂. 属性 描述 item 循环体中的具体对象. 支持属性的点路径访问,如item.age,item. ...

  6. mybatis 批量操作 ------持续更新

    mybatis 不存在则才进行添加 # 添加的 sql 语句insert into sys_link_post_user(post_id,user_id)# 进行批量添加 (若不需要可以取消 froe ...

  7. (七)mybatis批量操作,分页插件

    首先使用方式很简单: SqlSession sqlSession = sessionFactory.openSession(ExecutorType.BATCH); 批量操作核心:改变执行sql的方式 ...

  8. on duplicate key update 的用法说明(解决批量操作数据,有就更新,没有就新增)mybatis批量操作数据更新和添加

    项目用的ORM框架是用springdatajpa来做的,有些批量数据操作的话,用这个效率太低,所以用mybatis自己写sql优化一下. 一般情况,我们肯定是先查询,有就修改,没有就添加,这样的话,单 ...

  9. 170515、mybatis批量操作

    //Java代码 public void batchAdd(){ SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSession(); Stud ...

随机推荐

  1. 第六次团队作业——Alpha冲刺之事后诸葛亮

    Deadline:2016-11-24 22:00pm Alpha冲刺,很多同学经历了"Learning by doing"的学一门新的编程语言.学Git.学做一个完整的项目.但是 ...

  2. 跟着《beginning jquery》学写slider插件并借助自定义事件改进它

    <beginning jquery>是一本很不错的学习jquery的书,作者的讲解深入浅出,很适合初学者,在最后一章里面,作者把前面所有的点结合起来完成了一个轮播图的jquery插件.实现 ...

  3. C#-WebForm-简单控件

    在HTML中称"元素",添加了"runat='server'"后称控件,后台服务端可以控制 想要后台改变前端的控件,需要先让后台获取前端控件 常用的简单的表单元 ...

  4. Eclipse中一个Maven工程的目录结构

    在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织的这种问题,跟不要说自己 ...

  5. 小猪cms之怎样查询绑定的微网站模板

    微网站内容页面url g=Wap&m=Index&a=content (g=Wap)模块路径对应路径:\PigCms\Lib\Action\Wap (m=Index)控制文件对应文件: ...

  6. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  7. wpf ListBox删除

    绑定一个GUID对象 重绑定的数组中移除改对象,重新绑定.

  8. Python or JavaScript 实现多级评论

    Python or JavaScript 实现多级评论 Python 实现 Js 实现

  9. 利用scrapy和MongoDB来开发一个爬虫

    今天我们利用scrapy框架来抓取Stack Overflow里面最新的问题(),并且将这些问题保存到MongoDb当中,直接提供给客户进行查询. 安装 在进行今天的任务之前我们需要安装二个框架,分别 ...

  10. BZOJ1923: [Sdoi2010]外星千足虫

    传送门 高斯消元求解Xor方程. 这个方程很容易换成xor的方程.然后用高斯消元搞就行了. 用bitset实现这个非常方便. //BZOJ 1923 //by Cydiater //2016.11.3 ...