动态 SQL
欢迎来到我的 ChatGPT 中转站,极具性价比,为付费不方便的朋友提供便利,有需求的可以添加左侧 QQ 二维码,另外,邀请新用户能获取余额哦!最后说一句,那啥:请自觉遵守《生成式人工智能服务管理暂行办法》。
# 动态 Sql
# If 标签
注意字符串类型的数据需要要做不等于空字符串校验。
例如:性别不等于 null 或者是 username 不等于 null。
# Where 标签
映射文件中的 where 标签可以过滤掉条件语句中的第一个 and 或 or 关键字。以上 SQL 当 prodId!=null 时会被 mybatis 的 where
标签去除掉多余的 and 关键字,生成的 sql 如下:
SELECT prod_id prodId, vend_id vendId, prod_name prodName, prod_desc prodDesc
FROM Products
WHERE prod_id = ?
AND prod_name = ?
1
2
3
4
2
3
4
注意
where 标签只能去除第一个条件中出现的前置 and 关键字。像以下情况,where 就无能为力了
Mybatis 会把此 SQL 语句拼接成:
SELECT prod_id prodId, vend_id vendId, prod_name prodName, prod_desc prodDesc
FROM Products
WHERE prod_id = ?
AND prod_name = ?
AND
1
2
3
4
5
2
3
4
5
# Sql 片段
我们可以将重复的 sql 脚本提取出来
# Foreach
根据多个 id 查询用户信息
SELECT *
FROM user
WHERE id IN (1, 10, 24)
1
2
3
2
3
# 场景一
编写 UserMapper
public List<User> selectUsersByIds(QueryVO vo);
1编写 QueryVO
public class QueryVO { //------省略----- private List<Integer> idsList; //------省略----- }
1
2
3
4
5编写 UserMapper.xml
- Item:这个这个类似于 jstl 中 foreach 的,item 这个地方的值你设置为 aaa, 底下就必须写 #{aaa}
- separator:是使用什么分割符
- open:类似这个条件参数的左边是什么,这里是左括号
- close:类似这个条件参数的右边是什么,这里是右括号
# 场景二
编写 UserMapper
public List<User> selectUsersByIds(Integer [] ids);
1编写 UserMapper.xml
注意
如果使用的是 Integer 或者是 String 这种数组一定要写成 array,因为 mybatis 底层是将这个数组变成了一个 map 集合,并且将这个
map 集合的 key 设置成了 array,所以写成其他的会报错。
# 场景三
编写 UserMapper
public List<User> selectUsersByIds(List<Integer> ids);
1编写 UserMapper.xml
如果入参类型为 List 的话 Collection 中的值就为 list(小写)
上次更新: 2025/04/12, 05:37:39