mysql和oracle的mybatis操作

1.Oracle、MySQL插入时返回下一个主键的操作

Xml代码

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);

时间: 2024-08-29 14:35:54

mysql和oracle的mybatis操作的相关文章

MySQL 和 Oracle 在 MyBatis 使用中的区别

MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 IN 模式提供了默认的 jdbcType,没有为 OUT 模式提供 如果入参存在 null 的情况,需要 存储过程的参数模式 mode 为 OUT 时,是否需要指定 jdbcType 需要 需要 是否支持游标参数 不支持 支持 原文地址:https://www.cnblogs.com/cag205

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

一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集. 1.2 MyBatis发展史 MyBatis 原本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis ,2013年11月迁移到Github. ### 1.3 MyBatis和H

mybatis中mysql和oracle的差异

1.applicationContext.xml中的配置差异: 在applicationContext.xml的数据源dataSource的配置中,mysql数据库需要心跳包的配置,而oracle中不需要,否则会报错 2.mybatis模糊查询中sql语句的差异 mysql在使用concat拼接字符串时可以直接将三者[%.占位符.%]拼到一起,而oracle则不可以,必须两两拼接,否则就会报ORA-00909: 参数个数无效的错误 mysql: <select id="selectUser

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

项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller层测试参考: https://www.cnblogs.com/PollyLuo/p/9630822.html mysql版本:5.5.62 点击下载 1.kotlin版springboot项目创建 访问https://start.spring.io/, 创建项目demo(maven + kotlin

Spring集成myBatis操作数据库

学习来源: http://www.cnblogs.com/lhw1994/p/6759815.html 1. mybatis介绍 这是一个半自动化的框架,何谓半自动,因为它需要手工编写POJO.SQL和映射关系.虽然要多花点时间编写SQL语句,但至少在优化方面可以省心不少. 2. Spring与myBatis的结合 2.1 基础配置文件  mybatis_config.xml <?xml version="1.0" encoding="UTF-8"?>

Mysql与Oracle区别

文章分类:数据库 周五去一家公司去面试,那公司经理问了关于Mysql与Oracle的区别问题,以前没有总结,回答也不是很好,只是凭感觉,先总结如下: 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访问量,是OLTP最好的工具. 3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特

Mysql与Oracle区别(转载)

Mysql与Oracle区别 文章分类:数据库 转载于http://blog.sina.com.cn/s/blog_5d9ca4ea0100kmhy.html 周五去一家公司去面试,那公司经理问了关于Mysql与Oracle的区别问题,以前没有总结,回答也不是很好,只是凭感觉,先总结如下: 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访问量,是

qlserver、Mysql、Oracle三种数据库的优缺点总结

这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下 一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能.与许多其他服务器软件紧密关联的集成性.良好的性价比等:为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势.从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要.作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应

使用Oracle SQL Developer迁移MySQL至Oracle数据库

Oracle SQL Developer是Oracle官方出品的数据库管理工具.本文使用Oracle SQL Developer执行从MySQL迁移至Oracle数据库的操作. 2017年3月6日 操作步骤: 1.在Oracle数据库中创建移植资料档案库用户 资料档案库用户不是用来接收MySQL迁移数据的用户,而是进行数据迁移配置的用户. Oracle创建用户命令如下: create user migrater identified by migrater; alter user migrate