一、动态SQL概述
以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情。通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字段的最后省略逗号。MyBatis使用动态SQL来改善这种情形,动态SQL是基于OGNL的表达式,可方便我们在SQL语句中实现某些逻辑。用于实现动态SQL的元素如下。
if:利用if实现简单的条件选择
choose(when,otherwise):相当于Java中的switch语句,通常与when和otherwise搭配使用
set:解决动态更新语句
trim:可以灵活的去除多余的关键字
foreach:迭代一个集合,通常用于in条件
二、if用法
在查询条件不是很多并且较为固定的情况下,最好的解决方案是采用多参数直接入参的方式,这样代码比较清晰,可读性强。如下
public interfaceUserMappper{public List getUserList(@Param("userName") String userName,
@Param("userRole") Integer roleId);}
select u.*, r.roleName from smbms_user u, smbms_role r
where u.userName like connect ('%', #{userName}, '%')
and u.userRole=#{userRole} and u.userRole=r.id
在上述代码中,