1.常用标签
if:条件判断,与java中的计语句类似
where:为SQL语句动态where关键字
choose:条件判断,这是一个组合标签,需要与where、otherwise标签搭配使用。可实现与java中的Switch语句类似的功能
foreach:以遍历方式处理集合类型参数
set:为SQL语句动态添加set关键字,实现动态实现数据更新功能
trim:对SQL语句进行格式化处理,添加或移除前后缀
2.if标签是MyBatis框架动态SQL技术中重要且常用的标签之一,它所实现的功能与java中的if语句基本相同,用法也很相似
SysUserMapper类的selectList()方法
/** * 查询用户列表(分页查询) * @param realName * @param roleId * @return */ List<TSysUser>selectList(@Param("realName")String realName,@Param("roleId")long roleId);
SysUserMapper.xml中的查询代码:
<select id="selectList" resultType="TSysUser"> select u.*,r.roleName from t_sys_user u,t_sys_role r where u.roleId=r.id and u.roleId=#{roleId} and u.realName like CONCAT('%',#{realName},'%') </select>
测试类
List<TSysUser> tSysUser; String roleName="赵"; long roleId=2; tSysUser=sqlSession.getMapper(SysUserMapper.class).selectList(roleName,roleId); logger.debug("updatePwd count:"+tSysUser);
3.where标签的主要作用是对SQL语句中的where关键字进行简化处理,并可以智能地处理其内部and、or等关键字,避免多余字符带来的语法错误
4.choose(when、otherwise)标签
choose标签是一个组合标签,通常与when、otherwise标签配合使用,实现了类似于Java中Switch语句的功能
语法
<choose> <when test="条件判断,返回true或false"> SQL语句... </when> <when test="条件判断,返回true或false"> SQL语句... </when> <otherwise> SQL语句 </otherwise> </choose>
5.foreach标签处理数组类型参数
在SysUserMapper中添加getUserByRoleIdArray()方法:
/** * 根据角色id数组 查询用户列表信息 * @param roleIds * @return */ public List<TSysUser> getUserByRoleIdArray(Integer[] roleIds);
在SysUserMapper.xml中添加的查询代码
<select id="getUserByRoleIdArray" resultType="TSysUser"> select * from t_sys_user where roleId in <foreach collection="array" item="item" open="(" separator="," close=")"> #{item} </foreach> </select>
测试类
@Test public void getUserByRoleIdArray() { List<TSysUser>userList=new ArrayList<TSysUser>(); Integer[] roleIds={1,2}; userList=sqlSession.getMapper(SysUserMapper.class).getUserByRoleIdArray(roleIds); logger.info("查询到用户数量:"+userList.size()); for (TSysUser user:userList){ logger.info("查询到用户信息:"+user); } }
6.set标签的用法和功能都与where标签非常相似,可以在其包衷的语句前拼接一个set关键字,并能忽略更新语句尾部多余出来的逗号。配合if标签灵活使用set标签,就可以拼接SQL时忽略不需要修改的字段,从而实现数据部分更新的功能
语法
<set> <if test="条件判断,返回true或false"> SQL语句... </if> ... </set>
7.trim标签:where、set标签能够动态地为SQL语句添加前后缀,并可以智能地忽略前后多余的and、or或逗号等字符
语法
<trim prefix="前缀" suffix="后缀" prefixOverrides="忽略前缀"> </trim>
trim标签属性如下
prefix:前缀,可以自动对trim标签所包含的语句是否返回进行判断。如果有返回值,则为SQL语句拼接相应前缀
suffix:后缀,在trim标签包含的语句末尾拼接后缀
prefixOverrides:忽略前缀,忽略trim标签内部首部指定的内容
>suffixOverrides:忽略的后缀,忽略trim标签包含内容尾部指定的内容