Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除
今天利用Mybatis的<for each>标签做oracle的批量插入数据时,发现和MySQL数据库有区别。在此记录下,以防之后再踩坑。
一、批量插入:
1.controller:
/*** batchSaveAccountRole 批量给角色添加用户** @param role* @return R返回类型*/@RequestMapping(value = "/batchSaveAccountRole", method = RequestMethod.PUT)@ResponseBodypublic R batchSaveAccountRole(@RequestBody List<RoleAccount> roleAccountList) {R r = R.ok();if (roleAccountList != null) {int row = roleService.batchSaveAccountRole(roleAccountList);r = R.ok(row + "");}return r;}
2.service:
public int batchSaveAccountRole(List<RoleAccount> roleAccountList) {return roleDao.batchSaveAccount2Role(roleAccountList);
}
3.dao:
int batchSaveAccount2Role(List<RoleAccount> roleAccountList);
4.mapper(Oracle):
<insert id="batchSaveAccount2Role" parameterType="java.util.List">INSERT INTO SYSTEM_ACCOUNT_ROLES (role_id, account_id)<foreach close=")" collection="list" item="item" open="(" separator="union all">select#{item.roleId},#{item.accountId}from dual</foreach>
</insert>
在Oracle的版本中,有几点需要注意的:
1.SQL中没有VALUES;
2.<foreach>标签中的(selece ..... from dual);
3.<foreach>标签中的separator的属性为"UNION ALL",将查询合并结果集。
5.mapper(MySQL):
<insert id="batchSaveAccount2Role" parameterType="java.util.List">INSERT INTO SYSTEM_ACCOUNT_ROLES (role_id, account_id) values<foreach collection="list" item="item" separator=",">(#{item.roleId},#{item.accountId})</foreach>
</insert>
二、批量删除:
1.controller:
/*** 根据角色批量删除用户** @param ids 唯一ID列表* @return R 返回类型*/@RequestMapping(value = "/batchDeleteAccount2Role", method = RequestMethod.PUT)@ResponseBody@GeckoAuthority(codes = {"GECKO_SYSTEM_ROLES_DELETE"})public R batchDeleteAccount2Role(@RequestBody List<RoleAccount> roleAccountList) {R r = R.ok();if (roleAccountList != null) {int row = roleService.batchDeleteAccount2Role(roleAccountList);r = R.ok(row + "");}return r;}
2.service:
public int batchDeleteAccount2Role(List<RoleAccount> roleAccountList) {String roleId = roleAccountList.get(0).getRoleId();return roleDao.batchDeleteAccount2Role(roleId,roleAccountList);
}
3.dao:
int batchDeleteAccount2Role(@Param("roleId")String roleId, @Param("list")List<RoleAccount> roleAccountList);
4.mapper:
<delete id="batchDeleteAccount2Role">delete from SYSTEM_ACCOUNT_ROLES where role_id = #{roleId} and account_id IN<foreach collection="list" item="item" open="(" close=")" separator=",">#{item.accountId}</foreach>
</delete>
三、总结:
1.<for each> 标签的属性:
属性 | 描述 |
item |
循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。 具体说明:在list和数组中是其中的对象,在map中是value。 该参数为必选。 |
collection |
要做foreach的对象,作为入参时,List<?>对象默认用list代替作为键,数组对象有array代替作为键,Map对象没有默认的键。 |
separator | 元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。 |
open | foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选。 |
close | foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。 |
index | 在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。 |
2.Oracle dual表的使用:
dual表是一个虚拟表,用来和select语句一起使用。
1、查看当前用户
select user from dual
2、用来调用系统函数
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual ----得到当前系统时间
select SYS_CONTEXT('USERENV','TERMINAL') from dual;--获得主机名
select SYS_CONTEXT('USERENV','language') from dual;--获得当前locale
select dbms_random.random from dual;--获得一个随机数
3、得到序列的下一个值或当前值,用下面语句
select your_sequence.nextval from dual;--获得序列your_sequence的下一个值
select your_sequence.currval from dual;--获得序列your_sequence的当前值
4、可以用做计算器
select 7*9 from dual;
5、查空值
select null extattrid,null extattrname from dual union all select extattrid,extattrname from VExtAttrDetail where extattrsn in (22)
详见:http://www.cnblogs.com/qiangqiang/archive/2010/10/15/1852229.html
转载于:https://www.cnblogs.com/liuyk-code/p/7874497.html
Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除相关推荐
- Mybatis中Oracle和Mysql的Count字段问题
Mybatis中Oracle和Mysql的Count字段问题 我们在进行项目开发时经常会碰到查询总数的问题,所以我们直接是用select count(1) from table来进行查询.那么在Myb ...
- mysql pmt函数,Mybatis中Oracle和Mysql的Count字段问题
Mybatis中Oracle和Mysql的Count字段问题 我们在进行项目开发时经常会碰到查询总数的问题,所以我们直接是用select count(1) from table来进行查询.那么在Myb ...
- c mysql批量插入优化_MySQL实现批量插入以优化性能的教程
这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时 ...
- 批量插入数据到mysql_批量插入数据到 MySQL的几种方式
packagecom.sb.test;import java.sql.*;importjava.util.Random;/*** 批量操作+事务提交 **/ public classJdbcInser ...
- mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...
利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...
- mysql批量插入跟更新_Mysql批量插入和更新的性能
利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...
- php mongodb 批量插入,MongoDB不支持批量插入
mongodb的结构与关系型数据库不同,它类似树状结构,可以很方便对每个分支进行操作,但它没有像mysql那样insert(value.value.value...)那样的语法,也不支持transac ...
- 使用事务操作SQLite数据批量插入,提高数据批量写入速度,源码讲解
SQLite数据库作为一般单机版软件的数据库,是非常优秀的,我目前单机版的软件产品线基本上全部替换Access作为优选的数据库了,在开发过程中,有时候需要批量写入数据的情况,发现传统的插入数据模式非常 ...
- mybatis里oracle与MySQL的insert_update
需求:gisdata表中插入数据,如果wxid数据存在就更新,不存在就插入 Mysql的mybatis配置 1 <?xml version="1.0" encoding=&q ...
最新文章
- DAVID-GO-记录
- -webkit-font-smoothing
- 中山大学2016年硕士研究生入学考试复试基本分数线
- 成功解决 python 不是内部或外部命令,也不是可运行的程序或批处理文件
- VMware Tools安装和卸载
- C++的继承知识点重温
- Win32汇编——钩子
- ajax js java省市三级联动菜单,javaweb--json--ajax--mysql实现省市区三级联动(附三级联动数据库)(示例代码)...
- IEEE 802.15.4g协议介绍
- Google 2018 更新内容
- cad插入块_如何实现CAD图纸块的插入及合并操作
- 右键文件一直转圈卡死
- “大狼狗加密专家”使用简介
- 2022年国家社会/自然科学基金立项名单
- 保卫萝卜迅玩版53关php,保卫萝卜迅玩版 28关 | 手游网游页游攻略大全
- multisim中运放在哪找
- js给动态添加的元素添加属性
- Mandala Coloring Book Game ver 1.2 - 曼陀羅著色遊戲U3D源碼
- 1.1「Motoko——Basic concepts and terms Mutable state」
- 公共关系礼仪实务章节测试题——社会关系和公共关系(六)
热门文章
- MATLAB数学计算与工程分析范例教程,MATLAB数学计算与工程分析范例教程
- python执行命令并返回结果集_Python接口测试结果集实现封装比较
- cwntos新建目录挂载磁盘_centos挂载磁盘及扩展根目录
- 深圳网络推广公司介绍几点新网站优化守则!
- 内存淘汰算法_「承」Redis 原理篇——Redis 的内存回收机制
- jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求
- python内置数据结构教程_python课程第二周 内置数据结构——列表和元组
- 怎么查询redis缓存的数据_阿里开发十年写出这份「Redis简明教程」+「Redis实战」请你查收...
- html调用js进行MD5加密,js实现md5加密
- 光流 速度_[论文笔记] FlowNet 光流估计