mybatis中mysql转oracle的一些注意事项

在将Mybatis中的MySQL SQL转换为Oracle时,需要注意分页方式的不同,如MySQL使用limit,Oracle使用rownum。查询时Oracle要求别名前缀列名,字符串用单引号且拼接用' || ',CHAR_LENGTH替换为LENGTH,CONCAT用' || '替代,并处理日期格式。JDBC类型中避免使用other,改用varchar。
1、批量插入,使用INSERT ALL进行批量插入,如
<insert id="batchInsert" parameterType="java.util.List">
insert all 
<foreach collection="list" item="item" index="index" separator="">
into purchase_order_item (<include refid="orderItemFileds" />)
values( #{item.elsAccount,jdbcType=VARCHAR}  , #{item.toElsAccount,jdbcType=VARCHAR} 
</foreach>
SELECT 1 FROM DUAL

</insert>

2、分页

mysql使用的分页是limit m,n,而oracle则使用的是rownum

mysql语句:select dp.*,db.*  from d_category_product dcp join d_product dp on (dcp.product_id=dp.id) join d_book db on (dp.id=db.id) where dcp.cat_id=? limit ?, ?

oracle语句:select * from (select dp.*,db.*,rownum rn  from d_category_product dcp join d_product dp on (dcp.product_id=dp.id) join d_book db on (dp.id=db.id) where dcp.cat_id=?  and rn >?)  where rn<?

3、查询

查询中如果表名用了别名,那么后面的列名前一定要带别名,mysql只要没有重复的可以不带,但oracle必须要带上 

字符串使用单引号,不用双引号

4、函数

CHAR_LENGTH 改为 LENGTH,CONCAT改为用||连接

5、日期

VO中定义成字符串而数据库是日期格式的字段,需要用to_date(xxx,'yyyy-MM-dd')进行转换,如果VO中定义的已经是日期则不需要

6、jdbc 类型不能用other 改成varchar

7、自增id使用oracle序列替代,如ATTACHMENT_SEQ.NEXTVAL



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值