mybatischoose标签的使⽤
有时候我们并不想应⽤所有的条件,⽽只是想从多个选项中选择⼀个。⽽使⽤if标签时,只要test中的表达式为 true,就会执⾏ if 标签中的条件。MyBatis 提供了 choose 元素。if标签是与(and)的关系,⽽ choose 是或(or)的关系。
choose标签是按顺序判断其内部when标签中的test条件出否成⽴,如果有⼀个成⽴,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执⾏ otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。
例如下⾯例⼦,同样把所有可以限制的条件都写上,⽅⾯使⽤。choose会从上到下选择⼀个when标签的test为true的sql执⾏。安全考虑,我们使⽤where将choose包起来,放置关键字多于错误。
<!--  choose(判断参数) - 按顺序将实体类 User 第⼀个不为空的属性作为:where条件 -->
<select id="getUserList_choose"resultMap="resultMap_user"parameterType="com.yiibai.pojo.User">
SELECT *
FROM User u
jstl条件标签
<where>
<choose>
<when test="username !=null ">
u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%')
</when >
<when test="sex != null and sex != '' ">
AND u.sex = #{sex, jdbcType=INTEGER}
</when >
<when test="birthday != null ">
AND u.birthday = #{birthday, jdbcType=DATE}
</when >
<otherwise>
</otherwise>
</choose>
</where>
</select>
choose (when,otherwize) ,相当于java 语⾔中的 switch ,与 jstl 中 的 choose 很类似。
<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">
select * from t_blog where1 = 1
<choose>
<when test="title != null">
and title = #{title}
</when>
<when test="content != null">
and content = #{content}
</when>
<otherwise>
and owner = "owner1"
</otherwise>
</choose>
</select>
when元素表⽰当 when 中的条件满⾜的时候就输出其中的内容,跟 JAVA 中的 switch 效果差不多的是按照条件的顺序,当 when 中有条件满⾜的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有⼀个会输出,当所有的我很条件都不满⾜的时候就输出otherwise 中的内容。所以上述语句
的意思⾮常简单, 当 title!=null 的时候就输出 and titlte = #{title},不再往下判断条件,当title为空且 content!=null 的时候就输出 and content = #{content},当所有条件都不满⾜的时候就输出 otherwise 中的内容。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。