Mybatis批量操作
批量插入
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批量操作的更多相关文章
- mybatis批量操作-xml方式
在实际项目中,我们一般都会用到批量insert.delete.update等操作,由于使用频率还是蛮高的,这里就做个简单的记录,供以后学习和参考. 批量insert 在数据库中,批量插入可以是多条in ...
- Mybatis 批量操作-删除、修改和查询
批量操作的核心就是一次传入多个数据然后进行相关操作,增删改查中掌握其中一个,其它的就可以举一反三,触类旁通.它之所以执行效率高,是因为合并后日志量(MySQL的binlog和InnoDB的 ...
- MyBatis 批量操作、集合遍历-foreach
在使用mybatis操作数据库时,经常会使用到批量插入.IN条件查询的情况,这时就难免要使用到foreach元素.下面一段话摘自mybatis官网: foreach 元素的功能是非常强大的,它允许你指 ...
- MyBatis批量操作报错:Parameter 'xxxList' not found. Available parameters are [list]
问题背景: 在Dao中使用MyBatis进行查询操作,参数是传的一个List:studentNameList,但是在执行查询的时候报错,具体日志如下: com.chenzhou.base.mybati ...
- mybatis 批量操作增删改查
在介绍批量操作之前,首先先介绍一个语法:foreach.可以说是,foreach是整个批量操作的灵魂. 属性 描述 item 循环体中的具体对象. 支持属性的点路径访问,如item.age,item. ...
- mybatis 批量操作 ------持续更新
mybatis 不存在则才进行添加 # 添加的 sql 语句insert into sys_link_post_user(post_id,user_id)# 进行批量添加 (若不需要可以取消 froe ...
- (七)mybatis批量操作,分页插件
首先使用方式很简单: SqlSession sqlSession = sessionFactory.openSession(ExecutorType.BATCH); 批量操作核心:改变执行sql的方式 ...
- on duplicate key update 的用法说明(解决批量操作数据,有就更新,没有就新增)mybatis批量操作数据更新和添加
项目用的ORM框架是用springdatajpa来做的,有些批量数据操作的话,用这个效率太低,所以用mybatis自己写sql优化一下. 一般情况,我们肯定是先查询,有就修改,没有就添加,这样的话,单 ...
- 170515、mybatis批量操作
//Java代码 public void batchAdd(){ SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSession(); Stud ...
随机推荐
- vue.js学习(第一课)
学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...
- C#设计模式(2)——简单工厂模式
一.概念:简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创 ...
- AC自动机 HDU 2896
n个字串 m个母串 字串在母串中出现几次 #include<stdio.h> #include<algorithm> #include<string.h> #inc ...
- linux设置定时备份mysql数据库
最近写自己的项目,买了阿里云服务器,可以在云上根据自己想到的需求随意使用技术,感觉很爽.备份mysql流程如下: 环境:CentOS Linux release 7.2.1511 (Core) mys ...
- 定制sqlmap tamper脚本
前言 渗透测试过程中遇到注入点常常丢到sqlmap中进行测试,假如网站有waf,sqlmap便无法直接注入了. 测试 在测试某个项目的过程中,一个页面的aid参数,习惯性的提交 and 1=1发现直接 ...
- Beta版本冲刺第一天
Aruba 408 409 410 428 429 431 完成任务: 瀑布流方块长按删除提示 实现获取剪贴板内容并保存到数据库 常驻通知栏模块界面实现,设置按钮并预留intent 立会照片: 燃尽图 ...
- Django models Form model_form 关系及区别
Django models Form model_form
- jquery使用案例
表单验证 Dom实现表单验证 通过在form标签的submit上绑定一个onclick事件,用户点击事,触发这个事件,执行Checkvalid()函数进行对表单中的元素值验证,验证通过之后,继续让su ...
- 【总结】.Net面试题集锦(一)
一.背景 最近一直在准备面试,收到的面试邀请邮件里还有面试题,真是要当面霸的节奏,不过看看也好,一方面能够锻炼锻炼生锈的脑子,查缺补漏一下,另一方面,万一靠这几个面试题拿到offer呢,哈哈.开个玩笑 ...
- My97 DatePicker 日期选择插件.
My97DatePicker是一个纯js写的时间插件,体积较小,更可以自己扩展皮肤,且样式不和页面相冲突,有多钟配置,近期项目用了一下感觉还不错...分享给大家 软件官网:http://www.my9 ...