mysql和oracle的mybatis操作
1.Oracle、MySQL插入时返回下一个主键的操作
Oracle:
<insert id="insert" parameterClass="ROLE">
<selectKey keyProperty="id" resultClass="java.lang.Long" type="pre">
SELECT SEQ_ROLE.NEXTVAL AS ID FROM DUAL
</selectKey>
insert into ROLE(ID, NAME, CREATE, MODIFY) values (#{id}, #{name}, sysdate, sysdate)
</insert>
注意:这边的keyProperty="id"中"id"指的是Java对象ROLE中的属性,而并非数据库中ROLE表的属性。
1.2.Oracle、MySQL插入时返回当前主键的操作
Oracle:
<insert id="insert" parameterClass="ROLE">
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="roleId">
SELECT seq_LSP_ROLE.currval as ROLEID from DUAL
</selectKey>
insert into ROLE(ID, NAME, CREATE, MODIFY) values (#{id}, #{name}, sysdate, sysdate)
</insert>
MySQL:
<insert id="insert" parameterType="Role" useGeneratedKeys="true" keyProperty="roleId">
insert into role (name, create_time, update_time) values (#{name,jdbcType=VARCHAR}, now(), now())
</insert>
注意:role表的role_id字段是自动增长的,所以插入时不需要传入值;keyProperty="roleId"中"roleId"指的是Java对象Role中的属性,而并非数据库中role表的属性。
2.查询‘_’,'%' 这样的字符
java: roleName= roleName.replaceAll("_", "/_");
roleName= roleName.replaceAll("%", "/%");
<select id="selectRole" parameterType="java.util.Map"
resultType="java.lang.Integer">
SELECT COUNT(1) FROM LSP_ROLE_TAB T
<where>
<if test="roleName != null and roleName != ''">
AND T.ROLE_NAME LIKE CONCAT('%',CONCAT(#{roleName},'%')) ESCAPE '/'
</if>
<if test="1==1">
AND T.DELETE_FLAG = 0
</if>
</where>
</select>
3.插入、修改时存储创建、修改时间为数据库时间
Oracle: insert into role(ID, NAME, CREATE, MODIFY) values (#{id}, #{name}, sysdate, sysdate)
MySQL: insert into role (name, create_time, update_time) values (#{name,jdbcType=VARCHAR}, now(), now())
4.关系运算符的处理及转义
主要处理的是小于/小于等于符号(”<“/”<=“)与XML的尖括号”<“之间的冲突。可以用以下代码解决:
<where>
<if test="id != null">
<![CDATA[ AND T.ID < #{id} ]]>
</if>
...
</where>
包含在<![CDATA[ ]]>之间可避免
5.批量插入、修改、删除操作
<!-- MySQL批量插入 --> <insert id="insertBatch" parameterType="java.util.List"> insert into role_authority (role_id, authority_id) values <foreach collection="list" item="item" index="index" separator=","> (${item.roleId}, ${item.authorityId}) </foreach> </insert>
<!-- MySQL、Oracle通过主键集合批量删除记录 --> <delete id="batchRemove" parameterType="java.util.List"> DELETE FROM ld_user WHERE id IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </delete>
<!-- 批量修改与批量删除类似 注意:SQL的执行长度有限制,需要注意不能超长-->
6.模糊查询
<if test="entName != null and entName != ''">
AND t2.`name` LIKE "%"#{entName,jdbcType=VARCHAR}"%"
<!-- '%${entName,jdbcType=VARCHAR}%' -->
</if>
<if test="prdName != null and prdName != ''">
AND t3.`name` LIKE "%"#{prdName,jdbcType=VARCHAR}"%"
<!-- '%${prdName,jdbcType=VARCHAR}%' -->
</if>
<if test="roleName != null and roleName != ''">
AND T.ROLE_NAME LIKE CONCAT('%',CONCAT(#{roleName},'%'))
</if>
6.分页
<!--分页结果 oracle-->
<select id="selectPageList" parameterType="java.util.Map"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from (select ROWNUM as rn,
<include refid="Base_Column_List" />
FROM LSP_MUTUALINFO_TAB t
<where>
<if test="serverName != null and serverName != ''">
and t.SERVER_NAME like CONCAT('%',CONCAT(#{serverName},'%')) escape '/'
</if>
<if test="serverId != null and serverId != ''">
and t.SERVER_ID = #{serverId,jdbcType=VARCHAR}
</if>
<![CDATA[AND ROWNUM <= #{iPageSize} ]]>
</where>)
<where> <![CDATA[AND rn > #{iPageIndex} ]]></where>
</select>
7.oracle中删除表中某字段出现重复的信息 保留其中一条
1、将根据name相同 ID不同来的方式来判断(id必须唯一)
delete from test a where exists (select null from test b where b.name=a.name and b.id>a.id);
2、用rowid 来代替其中的id,比上面的方法更适用,没有字段唯一限制
delete from test a where exists (select null from test b where b.name=a.name and b.rowid>a.rowid);
3、 通过分析函数根据name 分组生成序号,然后删除序号大于1 的数据
这里的ROW_NUMBER() OVER (partition by name order by name) 是先把name列升序,再为降序以后的没条name记录返回一个序号,
delete from test where rowid in (select rowid from (select rowid as rid, row_number() over(partition by name order by id) as seq from test) where seq > 1);
转载于:https://www.cnblogs.com/chenyq/p/4546882.html
mysql和oracle的mybatis操作相关推荐
- mysql中if在oracle怎么用_mysql和oracle的mybatis操作
1.Oracle.MySQL插入时返回下一个主键的操作 Xml代码 Oracle: SELECT SEQ_ROLE.NEXTVAL AS ID FROM DUAL insert into ROLE(I ...
- oracle 和mysql语法上的区别,Mysql和Oracle的一些语法区别
作为一个有追求的程序猿,当然要不断的学习,巴拉巴拉巴拉...好了,贴一个网址给大家,哈哈 MySQL与Oracle 差异比较:http://www.cnblogs.com/HondaHsu/p/364 ...
- Spring Boot(六)集成 MyBatis 操作 MySQL 8
## 一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果 ...
- mybatis操作Oracle数据库批量插入与更新、运行注意事项、属性含义
一.项目需求 针对将近300万用户的用电数据进行统计分析,将结果更新保存Oracle数据库.我需要往一个表里面插入数据,数据量总计在500万条左右.一条一条插入的话非常慢,2万条数据近20分钟,后面就 ...
- Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Mybatis操作Oracle中的Clob和Blob字段
文章目录 Mybatis操作Oracle中的Clob和Blob字段 [ 我测试用的Mybatis Plus ] A.数据准备 A-1. Oracle中创建测试的表结构:Byte_Array_Test, ...
- Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案 在使用Mybatis 3 时,发现了这个问题,当插入数据时,如果有一个字段为空值时,系统会报异 ...
- Mybatisplus代码生成 之SpringBoot适配MYSQL和ORACLE
Mybatisplus代码生成 之SpringBoot适配MYSQL和ORACLE 文章目录 前期准备: 看图操作,一路下一步 1. 导入相关依赖 2. 新建代码生成类MysqlGenerator 2 ...
- 吊打面试官!MySQL和Oracle灵魂100问,你能答出多少?
内容简介: mysql部分: 一.数据据基本概念 二.Mysql经典例题20道 Oracle部分: 一.Oracle经典例题50道 二.Oracle相关概念 前言 本文'主要受众为开发人员,所以不涉及 ...
最新文章
- ping 一会通一会不通
- struts2和spring的两种整合方式 action的自动装配
- KEIL和source insight混合编辑时,文本对齐的方式
- Activity、Task、应用和进程
- 做好FPGA设计的五项基本功 (Z)
- 动态链接(指向运行时常量池的方法引用)
- Linux下安装Redis及搭建主从
- c语言高级语言期中测试答案,上海理工大学C语言2011期中试题和答案
- java nextintln_java – 从lambda表达式引用的局部变量必须是final或者有效的final
- Java设计模式、框架、架构、平台之间的关系
- 2014全国计算机等级考试四级数据库工程师考试大纲,4月全国计算机等级考试四级数据库工程师笔试试卷(1)...
- 数据结构学习(1):单链表
- WCF读书笔记(1)
- Spark的简介和在大数据领域的地位
- 9.2 配置rsync+inotify实时同步
- 使用USB转485编程电缆连接西门子 S7-200的软件配置方法以及可能出现的问题
- 下载网页 TS视频并自动合成视频
- linux setcap指令,linux setcap/getcap
- git commit --amend 的使用记录
- Scrum板与Kanban如何抉择?kdliihoap板与按照xhvrcr
热门文章
- 演练 动态数组存储学生对象 并且实现遍历 0119
- javascript 西瓜一期 09 字符与编码的对应关系 理解
- python操作xpath 0227
- 爬虫-post请求-RR网的登陆页-草稿-关注js反爬虫手法-只看不钻
- (原創) 如何使用Operator Overloading? (C/C++)
- Confluence 6 CSS 指南:修改顶部背景
- zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。...
- svn添加到windows服务中
- MySQL学习笔记之MySQL安装详解
- Windows服务卸载之后未重启机器之前再安装问题