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 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
在将Mybatis中的MySQL SQL转换为Oracle时,需要注意分页方式的不同,如MySQL使用limit,Oracle使用rownum。查询时Oracle要求别名前缀列名,字符串用单引号且拼接用' || ',CHAR_LENGTH替换为LENGTH,CONCAT用' || '替代,并处理日期格式。JDBC类型中避免使用other,改用varchar。
2912

被折叠的 条评论
为什么被折叠?



