关于mybatis的动态SQL官网网址点击跳转 动态SQL其实就是你可以加上自定义的条件,从而更好的获取到需要的数据。 这是映射文件的结果集映射,后面都要用的
<resultMap id="admin" type="com.csh.bean.Admin">
<id property="adminAccount" column="admin_account"></id>
<result property="adminPwd" column="admin_pwd"></result>
</resultMap>
dao层中的方法
public interface AdminDao {
public List<Admin> selectAll(Admin admin);
public List<Admin> selectAll2(Admin admin);
public List<Admin> selectAll3(Admin admin);
public List<Admin> selectAdminByAccount(@Param("adminAccounts") List<String> adminAccounts);
}
1、where :与sql语句中的where使用一样,这里为标签显示,同样会在SQL语句上显示where,一般可与if 标签一起使用,直接看例子吧
<select id="selectAll" resultMap="admin">
select * from admin
<where>
<if test="adminPwd != null">
admin_pwd = #{adminPwd}
</if>
<if test="adminAccount != null">
and admin_account = #{adminAccount}
</if>
</where>
</select>
其实跟其他语言一样,只是加上if作为判断语句,而sql语句的条件限制一般都在where后面
2、choose choose 标签里有when 、otherwise 标签
<select id="selectAll2" resultMap="admin">
select * from admin
<where>
<choose>
<when test="adminAccount != null">
admin_account = #{adminAccount}
</when>
<when test="adminPwd != null">
admin_pwd = #{adminPwd}
</when>
<otherwise >
1 = 1
</otherwise>
</choose>
</where>
</select>
这里的choose 里边有两个when 、一个otherwise ,执行效果与java中的if...else if...if... 效果是一样的
3、trim trim是可以自定义where语句 prefix:为sql语句整体增加一个前缀 prefixOverrides:去除整体sql语句前面多余的字符串 suffixOverrides:去除整体sql语句后面多余的字符串 suffix:为sql语句整体增加一个后缀
<select id="selectAll3" resultMap="admin">
select * from admin
<where>
<trim prefixOverrides="and" suffixOverrides="and">
<if test="adminPwd != null">
admin_pwd = #{adminPwd} and
</if>
<if test="adminAccount != null">
and admin_account = #{adminAccount} and
</if>
</trim>
</where>
</select>
匹配多个时,中间加"|",如suffixOverrides="and | or"
4、foreach :遍历集合中的元素 标签中元素: collection :指定要遍历的集合 separator :分隔符 open :以什么开始 close :以什么结束 item :遍历过程中的每一个元素值 index :表示索引
<select id="selectAdminByAccount" resultMap="admin">
select * from admin where admin_account in
<foreach collection="adminAccounts" close=")" index="" item="account" open="(" separator=",">
#{account}
</foreach>
</select>
上面几个是常用的,还有 script :在带注解的映射器接口类中使用动态 SQL,可以使用 script 元素
@Update({"<script>",
"update Author",
" <set>",
" <if test='username != null'>username=#{username},</if>",
" <if test='password != null'>password=#{password},</if>",
" <if test='email != null'>email=#{email},</if>",
" <if test='bio != null'>bio=#{bio}</if>",
" </set>",
"where id=#{id}",
"</script>"})
void updateAuthorValues(Author author);
还有bind 、多数据库支持 、动态SQL中插入脚本语言 看官网详解吧
|