在MyBatis中,如何仅用一个长尾替代if else条件判断逻辑?
- 内容介绍
- 文章标签
- 相关推荐
本文共计224个文字,预计阅读时间需要1分钟。
MyBatis 配置示例:使用 `if` 选择器动态条件查询,`id` 为 getFiles,`resultMap` 为 BaseResultMap,从 files 表中选取状态为 1 的记录,若 `size` 不为空,则进一步限制 `size`。代码如下:
xml SELECT * FROM files WHERE status=1 AND size=#{size}
MyBatis中的if
<select id="getFiles" resultMap="BaseResultMap">
select * from files where status=1
<if test="size!=0">
and size=#{size}
</if>
order by id
</select>
MyBatis中没有else
(1)使用两个if
<select id="getFiles" resultMap="BaseResultMap">
select * from files where status=1
<if test="dealBigFiles == 0">
and size <= #{maxFileSize}
</if>
<if test="dealBigFiles != 0">
and size > #{maxFileSize}
</if>
order by id
</select>
(2)使用chose when otherwise
<select id="getFiles" resultMap="BaseResultMap">
select * from files where status=1
<choose>
<when test="dealBigFiles == 0">
and size <= #{maxFileSize}
</when>
<otherwise>
and size > #{maxFileSize}
</otherwise>
</choose>
order by id
</select>
本文共计224个文字,预计阅读时间需要1分钟。
MyBatis 配置示例:使用 `if` 选择器动态条件查询,`id` 为 getFiles,`resultMap` 为 BaseResultMap,从 files 表中选取状态为 1 的记录,若 `size` 不为空,则进一步限制 `size`。代码如下:
xml SELECT * FROM files WHERE status=1 AND size=#{size}
MyBatis中的if
<select id="getFiles" resultMap="BaseResultMap">
select * from files where status=1
<if test="size!=0">
and size=#{size}
</if>
order by id
</select>
MyBatis中没有else
(1)使用两个if
<select id="getFiles" resultMap="BaseResultMap">
select * from files where status=1
<if test="dealBigFiles == 0">
and size <= #{maxFileSize}
</if>
<if test="dealBigFiles != 0">
and size > #{maxFileSize}
</if>
order by id
</select>
(2)使用chose when otherwise
<select id="getFiles" resultMap="BaseResultMap">
select * from files where status=1
<choose>
<when test="dealBigFiles == 0">
and size <= #{maxFileSize}
</when>
<otherwise>
and size > #{maxFileSize}
</otherwise>
</choose>
order by id
</select>

