您的位置:首页 > 数据库 > Oracle

MyBatis的几种应用场景

2013-10-24 00:00 453 查看
有幸在项目中用到了这个框架的大部分高级特性,比如一二级缓存,动态sql等等。真正的让我爱上了这个框架,本篇说一说一些典型的sql场景,看看这个框架是怎么来处理的。

insert语句返回oracle序列主键:

最普通的,我的表主键是序列来生成(由于是oracle),所以我需要插入时候生成序列主键并且返回,以下为配置:

<insert id="save" parameterType="cn.com.blossomframework.services.core.domain.Navigation">
<selectKey resultType="int" keyProperty="id" order="BEFORE">
select s_navigation.nextval as id from dual
</selectKey>
insert into navigation (
id,name,type,order,isshow,cid,portletid,uuid)
values (
#{id},#{name},#{type},#{order},#{isshow},#{cid},#{portletid},#{uuid})
</insert>


selectKey中order属性的值是不同的,BEFORE先选择主键,设置keyProperty的值然后执行插入语句。 AFTER是先执行插入语句,然后执行selectKey。

条件查询时候的入参不固定 :

<select id="findAll" resultMap="navigations">
select * from navigation
<where>
<if test="portetid != null">
login_name=#{portletid}
</if>
<if test="uuid != null">
and name=#{uuid}
</if>
</where>
</select>


如果有uuid和portletid这任意其中之一的入参,则执行条件查询,否则为普通查询

<update id="update" parameterType="int" >
update navigation
<set>
<if test="name != null">name=#{name},</if>
<if test="isshow != null">isshow=#{isshow},</if>
<if test="cid != null">cid=#{cid}</if>
</set>
where id=#{id}
</update>


update方法的不固定入参

处理clob,blob类型,第一篇博客blablabla写了一堆代码,在这里简单配置一个typehandler就搞定

<update id="update" parameterType="cn.com.blossomframework.services.core.domain.WebContent" >
update webcontent
set title=#{title},content=#{content,typeHandler=org.apache.ibatis.type.ClobTypeHandler}
where id=#{id}
</update>


blob的类型处理器为 B
lobTypeHandler(低版本的使用的是spring orm包的typehandler,只支持mybatis2.0版本,现在MyBatis已经3.2了,Spring太不给面子了,和hibernate是好基友,spring已经支持hibernate4了)

select * from 表名 where 列 in (1,2,3)

<select id="findAns" resultMap="announcements">
select *
from navigation
where idref in
<foreach item="cid" index="index" collection="array"
open="(" separator="," close=")">
#{cid}
</foreach>
</select>


入参为cid,index为循环的index,collection定义入参类型,array代表数组,也可以为list,显而易见open,separator和close是帮你拼接sql的,碉堡了有木有!

还有更多的动态sql高级应用和关联查询,具体参看git上的官方文档!
http://mybatis.github.io/mybatis-3/zh/configuration.html#settings
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息