MyBatis框架多态SQL

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标签包含内容尾部指定的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值