mybatis choose标签的使用

来源:互联网 发布:外貌协会的女生知乎 编辑:程序博客网 时间:2024/05/20 12:47

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用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       <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 where 1 = 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 中的内容。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一楼潮湿有虫子怎么办 镜子对着卧室门怎么办 入户门对着墙角怎么办 别人睡了主卧室怎么办 主卧别人睡过了怎么办 卧室门对着过道怎么办 有墙角对着窗户怎么办 卧室门对着墙角怎么办 冰箱和大门对着怎么办 冰箱对着入户门怎么办 哪来的大路对门怎么办 卧室窗户对着路怎么办 床尾对着窗户怎么办 床头对着厕所门怎么办 5楼阳台对着马路怎么办 宿舍门对着楼梯怎么办 如果镜子对着门怎么办 厕所门对着厨房怎么办 客厅门对着大门怎么办 床头对着厕所墙怎么办 被小狗舔了伤口怎么办 狗狗伤口好不了怎么办 狗的伤口发炎了怎么办 大门正对房门该怎么办 房门正对厕所门怎么办 浴室镜子对着门怎么办 房间门正对厕所怎么办 厕所斜对着大门怎么办 刚开麻将馆没人怎么办 入户门正对电梯怎么办 电梯对着入户门怎么办 电梯门对着房门怎么办 厨房门对入户门怎么办 餐桌对着入户门怎么办 房门正对楼梯下怎么办 电梯门对着家门怎么办 壁纸上的泡沫胶怎么办 卧室镜子对着门 怎么办 电视对着厨房门怎么办 厨房门对着大门怎么办 厨房对着入户门怎么办