MyBatis的几种应用场景

本文详细介绍了如何在MyBatis框架中利用高级特性处理复杂的SQL场景,包括自动生成序列主键、动态SQL条件查询和入参不固定情况下的灵活处理。文章还展示了如何高效操作CLOB和BLOB类型数据,并通过动态SQL实现条件查询的优化。通过实例解析,读者可以深入了解MyBatis框架在复杂业务场景下的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有幸在项目中用到了这个框架的大部分高级特性,比如一二级缓存,动态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

转载于:https://my.oschina.net/stillotherguy/blog/171118

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值