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操作的更多相关文章

  1. MySQL 和 Oracle 在 MyBatis 使用中的区别

    MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...

  2. MySQL转Oracle,MyBatis Mapper XML 文件修改项总结

    1.对于批量插入 需要更改成 <insert id="saveAll"> insert into(a,b,c) <foreach collection=" ...

  3. Spring Boot(六)集成 MyBatis 操作 MySQL 8

    一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集. ...

  4. mybatis中mysql和oracle的差异

    1.applicationContext.xml中的配置差异: 在applicationContext.xml的数据源dataSource的配置中,mysql数据库需要心跳包的配置,而oracle中不 ...

  5. MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束

    最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis 的foreach标签进行循环插入,可是搬照Mysql的批量插入会产生 异常 ### ...

  6. Spark记录-SparkSQL远程操作MySQL和ORACLE

    1.项目引入mysql和oracle驱动 2.将mysql和oracle驱动上传到hdfs 3.远程调试源代码如下: import org.apache.spark.sql.SQLContext im ...

  7. kotlin + springboot整合mybatis操作mysql数据库及单元测试

    项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller ...

  8. 备战金九银十,Java研发面试题(Spring、MySQL、JVM、Mybatis、Redis、Tomcat)[带答案],刷起来!

    八月在即,马上就是"金九银十",又是跳槽招聘季.咱们这行公认涨薪不如跳槽加的快.但不建议频繁跳槽,还是要学会融合团队,抓住每个机会提升技能. 苏先生在这里给大家整理了一套各大互联网 ...

  9. JAVA - SpringBoot项目引用MyBatis操作数据库

    JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...

随机推荐

  1. Python类,域,方法,对象,继承

    类和对象: 是面向对象编程的两个主要方面,类创建一个新类型,而对象这个类的实例.. 域: 属于一个对象或类的变量被称为域.域有两种类型: 属于每个实例(类的对象)或属于类本身.它们分别被称为实例变量和 ...

  2. 【转】SQL SERVER CLR存储过程实现

    最近做一个项目,需要做一个SQL SERVER 2005的CLR的存储过程,研究了一下CLR的实现.为方便以后再使用,在这里总结一下我的实现流程,也供对CLR感兴趣但又不知道如何实现的朋友们做一下参考 ...

  3. Mysql存储过程简明使用

    mysql> \d //  改变命令行下的结束符标志mysql> create procedure p3() -> begin -> set @i=1;  # 这样也可以定义变 ...

  4. (C#) Lock - 将对象上锁,互斥多个线程,使同步。

    C# Lock 原文:http://www.dotnetperls.com/lock Locking is essential in threaded programs. It restricts c ...

  5. eclipse 中的注释 快捷键-添加/* */注释-Ctrl+Shift+/

    (4)Ctrl+Shift+/ 说明:添加/* */注释 (5)Ctrl+Shift+\ 说明:消除/* */注释 更多:http://blog.csdn.net/wjeson/article/det ...

  6. spark RDD transformation与action函数整理

    1.创建RDD val lines = sc.parallelize(List("pandas","i like pandas")) 2.加载本地文件到RDD ...

  7. Spark RDD简介与运行机制概述

    RDD工作原理: 主要分为三部分:创建RDD对象,DAG调度器创建执行计划,Task调度器分配任务并调度Worker开始运行. SparkContext(RDD相关操作)→通过(提交作业)→(遍历RD ...

  8. PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读

    2014-12-19 Created By BaoXinjian

  9. AP_AP系列 - 发票管理分析(案例)

    2014-07-07 Created By BaoXinjian

  10. rand()随机数的产生

    #include "stdio.h"#include<stdlib.h>用下列公式即可得到指定范围[m,n]的随机数: r = rand()%(n - m + 1) + ...