MyBatis框架动态SQL
MyBatis框架动态SQL处理简单的多参数查询
MyBatis框架动态SQL的常用标签
标签 | 说明 |
---|---|
if | 条件判断,与Java中的if语句类似 |
where | 为SQL语句动态添加where 关键字 |
choose | 条件判断,这是一个组合标签,需要与 when、otherwise 标签搭配使用。可实现与 Java 中的 switch 语句类似的功能 |
foreach | 以遍历方式处理集合类型参数 |
set | 为SOL语句动态添加set 关键字,实现动态实现数据更新功能 |
trim | 对SOL语句进行格式化处理,添加或移除前后缀 |
if标签
<if test="条件判断, 返回true或false">
SQL语句...
</if>
例:如果sql语句中supCode为null sql语句就将变为 where and supName like concat(‘%’,#{supName},‘%’) 不符合sql语句语法
针对以上情况MyBatis为我们提供了where标签,他可以智能的处理and或or,不能添加。
select * from t_supplier
where
<if test="supCode!=null and supCode!=''">
supCode like concat('%',#{supCode},'%')
</if>
<if test="supName!=null and supName!=''">
and supName like concat('%',#{supName},'%')
where标签
select * from t_supplier
<where>
<if test="supCode!=null and supCode!=''">
and supCode like concat('%',#{supCode},'%')
</if>
<if test="supName!=null and supName!=''">
and supName like concat('%',#{supName},'%')
</if>
</where>
chooose(when/otherwise)标签
语法:
<choose>
<when test="条件判断,返回true或false">
SQL语句...
</when>
<when test="条件判断,返回true或false">
SQL语句...
</when>
<otherwise>
SQL语句...
</otherwise>
</choose>
choose标签中多个when标签只会执行匹配的第一个然后就跳出了choose标签
MyBatis框架动态SQL处理集合参数
如果要查询的参数是集合类型的我们要通过标签去遍历集合中的参数最后拼接出一个MySQL语法的in语句来处理这类参数。
语法
select * from t_storage_record
where supplierId in
<!--collection 可根据是数组还是集合填写Array或者List-->
<foreach collection="参数名" item="元素别名" open="(" close=")" separator="," index="当前元素的位置下标“”>
#{元素别名}
</foreach>
语法属性介绍
属性 | 说明 |
---|---|
item | 遍历数组时,为数组或 List 集合中的元素起的别名。 |
open | 起始位置的拼接字符,表示 n 语句以“(”左括号开始 |
close | 结束位置的拼接字符,表示 in 语句以“)”右括号结束。 |
separator | 元素之间的连接符,表示 in 语句中的元素之间以“”逗号连接。 |
collection | 参数名称。当参数为数组类型时,默认参数名为 array。当参数类型为 List集合时默认参数名为 list。当参数类型为 Map 时,参数名为 Map 中集合元素所在键值对的 key。 |
MyBatis框架动态SQL处理更新功能
set标签
与where标签一样为了避免sql语法错误会智能的忽略多余的逗号
<update id="updateSupplier">
update t_supplier
<set>
<if test="supName!=null and supName!=''">
supName=#{supName},
</if>
<if test="supPhone!=null and supPhone!=''">
supPhone=#{supPhone},
</if>
<if test="supAddress!=null and supAddress!=''">
supAddress=#{supAddress},
</if>
<if test="supContact!=null and supContact!=''">
supContact=#{supContact},
</if>
</set>
where id = #{id}
</update>
trim标签
<trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
<if test="supName!=null and supName!=''">
supName=#{supName},
</if>
<if test="supPhone!=null and supPhone!=''">
supPhone=#{supPhone},
</if>
<if test="supAddress!=null and supAddress!=''">
supAddress=#{supAddress},
</if>
<if test="supContact!=null and supContact!=''">
supContact=#{supContact},
</if>
</trim>
trim标签属性介绍
属性 | 说明 |
---|---|
prefix | 前缀,可以自动对 trim 标签所包含的语句是否有返回值进行判断。如果有返回值,则为SQL语句拼接相应前缀 |
suffix | 后缀,在trim 标签包含的语末尾拼接后缀 |
prefixOverrides | 忽略的前缀,忽略trim标内部首部指定的内容 |
suffixOverrides | :忽略的后缀,忽略trim标签包含内容尾部指定的内容 |
分页功能
<select id="findAll" resultType="SysUser">
select * from t_sys_user limit #{offset},#{rows}
</select>
test测试文件
//每页显示多少条数据
Integer pageSize=5;
//当前页数
Integer pageIndex=1;
//limit(offset)是跳过X行从(x+1)行开始显示 用当前页数显示公式为(pageIndex - 1) * pageSize
List<SysUser> all = mapper.findAll((pageIndex - 1) * pageSize, pageSize);
for (SysUser sysUser : all) {
System.out.println(sysUser);
}