动态查询--(choose,when,otherwise)

来源:互联网 发布:电视怎么调成网络电视 编辑:程序博客网 时间:2024/06/06 03:00
<select id="findUserInfoByOneParam" parameterType="Map" resultMap="UserInfoResult">          select * from userinfo           <choose>              <when test="searchBy=='department'">                  where department=#{department}              </when>              <when test="searchBy=='position'">                  where position=#{position}              </when>              <otherwise>                  where gender=#{gender}              </otherwise>          </choose>      </select>    

备注:
a.请注意这里的【select * from userinfo 】之后没有再写where语句
b.配合使用是等价于java中的if…elseIf…else
c.按照官方文档给的示例,最后的是需要存在的,但是经过测试,即使最后的没有写,Mybatis也不会发生任何异常。而是将所有表数据返回。这是一种极为不推荐的做法。实际生产环境下,如果该表的数据量非常大,这条语句被执行,就是一个巨大的坑!
d.再特别说明一下,请注意,每一个等号后面的参数都带有单引号。这是这种用法必须必须必须有的。否则,就是直接抛异常!

<select id="findUserInfoByOneParam" parameterType="Map" resultMap="UserInfoResult">          select * from userinfo           <choose>              <when test="department!=null">                  where department=#{department}              </when>              <when test="position!=null">                  where position=#{position}              </when>          </choose>      </select>  

e.上面这段代码,还有一个值得注意的地方就是,两个when之间的顺序是有关系的。即,如果第一个when满足条件,第二个就不会影响查询结果,和if..else类似,请读者自行尝试,观察控制台输出。
f.最后,补充一点,就是的子元素就只能包含

原创粉丝点击