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);
mysql和oracle的mybatis操作的更多相关文章
- MySQL 和 Oracle 在 MyBatis 使用中的区别
MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...
- MySQL转Oracle,MyBatis Mapper XML 文件修改项总结
1.对于批量插入 需要更改成 <insert id="saveAll"> insert into(a,b,c) <foreach collection=" ...
- Spring Boot(六)集成 MyBatis 操作 MySQL 8
一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集. ...
- mybatis中mysql和oracle的差异
1.applicationContext.xml中的配置差异: 在applicationContext.xml的数据源dataSource的配置中,mysql数据库需要心跳包的配置,而oracle中不 ...
- MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis 的foreach标签进行循环插入,可是搬照Mysql的批量插入会产生 异常 ### ...
- Spark记录-SparkSQL远程操作MySQL和ORACLE
1.项目引入mysql和oracle驱动 2.将mysql和oracle驱动上传到hdfs 3.远程调试源代码如下: import org.apache.spark.sql.SQLContext im ...
- kotlin + springboot整合mybatis操作mysql数据库及单元测试
项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller ...
- 备战金九银十,Java研发面试题(Spring、MySQL、JVM、Mybatis、Redis、Tomcat)[带答案],刷起来!
八月在即,马上就是"金九银十",又是跳槽招聘季.咱们这行公认涨薪不如跳槽加的快.但不建议频繁跳槽,还是要学会融合团队,抓住每个机会提升技能. 苏先生在这里给大家整理了一套各大互联网 ...
- JAVA - SpringBoot项目引用MyBatis操作数据库
JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...
随机推荐
- android如何播放资源文件夹raw中的视频
转自这里 videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/&qu ...
- ASP.NET的POST和GET提交并接收处理返回值
POST方法: 数据提交 /// <summary> /// POST提交数据接收字符json /// </summary> /// <param name=" ...
- BIP_开发案例03_将原有Report Builer报表全部转为XML Publisher形式(案例)
2014-05-31 Created By BaoXinjian
- PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读
2014-12-19 Created By BaoXinjian
- C#(结构体_枚举类型)
结构体一般定义在Main函数上面,位于Class下面,作为一个类:一般情况Struct定义在Main函数前面,Main函数里面的地方都可以使用,参数前面加上public代表公用变量. 用法 1 ...
- UI设计原则
一.一般原则 简单明了原则: 方便使用原则: 用户向导原则: 实时帮助原则: 自定义功能原则: 界面色彩原则: 二.Web系统适应原则 页面要瘦小 屏幕自适应 浏览器兼容 减少垂直滚动条 禁止水平滚动 ...
- ERWin & ERStudio图里的实线和虚线的含义[转]
注: ERWin 与 ERStudio 中这一点的描述方法是一样的. ERWin里面线代表实体间的三种关系:决定关系(Identifying Relationship),非决定关系(None-Iden ...
- 使用JS对form的内容验证失败后阻止提交 &&js校验表单后提交表单的三种方法总结
1.form的两个事件 submit,提交表单,如果直接调用该函数,则直接提交表单 onSubmit,提交按钮点击时先触发,然后触发submit事件.如果不加控制的话,默认返回true,因此表单总能提 ...
- memcached完全剖析–1. memcached的基础
系列文章导航: memcached完全剖析–1. memcached的基础 memcached全面剖析–2. 理解memcached的内存存储 memcached全面剖析–3. memcached的删 ...
- asterisk中使用dahdi通道呼出的注意事项
asterisk中使用dahdi通道呼出的注意事项 在使用dahdi通道呼出的时候,可以在Dial中对呼出所使用的通道进行指定选择.以下面的例子来说明: 场景说明:数字板卡单E1,使用pri信令,1- ...