动态Sql标签
- where
连接条件
a. 去掉where标签直接跟着关系词(and或or)
b. where标签无条件下不会拼接where字段
- if
做的判断:提供了一个条件
如果满足条件:拼接if标签中的语句
如果不满足:则不会拼接
test属性中的判断:
大于:gt
小于:lt
连接条件:and或者or
等于:==
不等于:!=
大于等于:比如判断age≥20 → age gt 20 or age == 20
小于等于:比如判断age≤20 → age lt 20 or age == 20
字符串比较:字符串用 ‘’ ,比如判断username为songge → username == ‘songge’
字符串长度:’songge’.length ,如果要判断username的长度 → username.length
业务:如果年龄大于等于20 查询条件 age ≥ #{age}
如果年龄小于20 查询条件 age < #{age}
if标签有else吗
if标签是没有else,如果你想写else那么你就写两个if标签,test属性中的条件是相反的
- choose-when-otherwise
做的就是if-else
when代表的是if
otherwise代表else
when标签中也是去写test属性 → 用法和if标签中的test一致
→ when标签和otherwise标签要作为choose标签的子标签
重写一下if标签中关于年龄判断的案例
- trim(去除)
去除功能:
prifixOverrides:如果最前面包含某个词 → 去除掉
suffixOverrides:如果最后面包含某个词 → 去除掉
补充功能:
prefix:在trim标签最前面补充
suffix:在trim标签最后面补充
业务:updateUser → update 传入的user对象的全部字段(不管是否为null全部更新)
updateSelectiveUser → update传入的user对象不为null的字段
a. 引出trim标签的使用
b. trim标签去除内容
c. 其他属性的使用
- set
更新语句 update标签中使用
更新语句的部分放到set标签 → 功能类似于:
<trim prefix=”set” suffixOverrides=”,”>
- sql、include
做的事情是
sql标签:定义sql → 定义了映射文件中的全局变量
include标签:引用sql → 引用这个全局变量
两种常见的使用情况:
a. 将查询结果的列写入到sql片段中
b. 通用的条件写入到sql片段中
- selectKey
在执行insert语句之前或之后额外的执行一次查询
业务:user这张表id是自增,执行insert(user)时,不定义id →
执行完之后,user对象上我们又想要获得自增的id
a. order=after
b. order=before
业务:password利用uuid来进行生成 → 构造user时就不设置password → 利用selectKey来设置
- foreach
遍历
a. 无注解数组
b. 无注解list
区别在于collection中的写法是不同的
c. @Param注解
不管你传入的是数组还是list → 写啥用啥
d. 另一个使用场景:insertList(一次性插入多条数据)
- useGenerateKeys keyProperty获得自增的主键(只有主键可以自增的数据库才可以这样做,mysql就可以)
insert标签中使用属性 → useGenerateKeys和keyProperty
a. 单条数据获得自增主键
b. 多条数据获得自增主键
注意:
这种异常信息一般是:sql语句写错了,应当检查映射文件中的sql语句。
作业:使用今天学过的sql标签 实现一个批量输入user对象的接口
int insertUsers(List<User> users)
int insertUsers(@Param("users")List<User> users)
该接口的users能够获得自增的主键
测试:
@Test
public void Homework1(){
User user6 = new User(null,"student6","zhengdaodeguang",18,"male",null);
User user7 = new User(null,"student7","zhengdaodeguang",18,"male",null);
User user8 = new User(null,"student8","zhengdaodeguang",18,"male",null);
User user9 = new User(null,"student9","zhengdaodeguang",18,"male",null);
List<User> users = new ArrayList<>();
users.add(user6);
users.add(user7);
users.add(user8);
users.add(user9);
int i = userMapper.insertUsers3(users); //i = 4
for (User user : users) {
logger.info(user);
}
}
@Test
public void Homework2(){
User user6 = new User(null,"student6","zhengdaodeguang",18,"male",null);
User user7 = new User(null,"student7","zhengdaodeguang",18,"male",null);
User user8 = new User(null,"student8","zhengdaodeguang",18,"male",null);
User user9 = new User(null,"student9","zhengdaodeguang",18,"male",null);
List<User> users = new ArrayList<>();
users.add(user6);
users.add(user7);
users.add(user8);
users.add(user9);
int i = userMapper.insertUsers2(users); //i = 4
for (User user : users) {
logger.info(user);
}
}