目录
1 if 标签
2 trim 标签
3 where 标签
4 set 标签
5 foreach 标签
动态 sql 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接。
在 xml 里面写判断条件。
动态SQL 在数据库里的体现就是,phtot 这个字段在数据输入的时候,在没有默认值情况下,可以为空。
在 SQL 中,空和 NULL 是两个不同的概念。空什么也没有显示,而 NULL 显示了 NULL。
/**
* 动态 sql
* if 标签
* @param userInfo
* @return
*/
int add2(UserInfo userInfo);
insert into userinfo(username,password
,photo
)values(#{username},#{password}
,#{photo}
)
@Test
void add2() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("猪八戒");
userInfo.setPassword("569875");
userInfo.setPhoto("lion.png");
int result = userMapper.add2(userInfo);
System.out.println(result);
}
@Test
void add2() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("如来佛祖");
userInfo.setPassword("99999");
int result = userMapper.add2(userInfo);
System.out.println(result);
}
多个字段可以为空的情况下,只要有一个字段不为空,就需要用到添加操作。动态拼接。
/**
* trim 标签
* @param userInfo
* @return
*/
int add3(UserInfo userInfo);
insert into userinfo
username,
password,
photo
values
#{username},
#{password},
#{photo}
@Test
void add3() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("观音菩萨");
userInfo.setPassword("3785");
int result = userMapper.add3(userInfo);
System.out.println(result);
}
@Test
void add3() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("卓耿");
userInfo.setPassword("sfgoz");
userInfo.setPhoto("dragon.jpn");
int result = userMapper.add3(userInfo);
System.out.println(result);
}
根据传入参数,来决定 SQL 语句是否有 where 关键字。动态生成 where 语句。
对于 int 类型,不传的话,默认为 0 ,而不是 null。
where 标签除了动态生成 where 语句外,还可以自动的去掉语句前面的 and。所以 and 只能放在语句的前面,放在最后面会报错!
/**
* where 标签
* @param userInfo
* @return
*/
List getListByWhere(UserInfo userInfo);
@Test
void getListByWhere() {
UserInfo userInfo = new UserInfo();
userInfo.setId(1);
List list = userMapper.getListByWhere(userInfo);
System.out.println(list);
}
@Test
void getListByWhere() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("白骨精");
List list = userMapper.getListByWhere(userInfo);
System.out.println(list);
}
也可以使用 trim 标签完成上述 where 标签的功能,代码如下:
用于修改。
/**
* set 标签
* @param userInfo
* @return
*/
int update2(UserInfo userInfo);
update userinfo
username=#{username},
password=#{password},
photo=#{photo}
where id=#{id}
@Test
void update2() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("小玫瑰");
userInfo.setId(6);
userInfo.setPassword("palsov");
userInfo.setPhoto("rose.jpg");
int result = userMapper.update2(userInfo);
System.out.println(result);
}
@Test
void update2() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("卡莉熙");
userInfo.setId(4);
userInfo.setPassword("msjf");
int result = userMapper.update2(userInfo);
System.out.println(result);
}
可以看出,set 标签会自动去除末尾的逗号!
多条 sql 数据删除的时候。批量删除。
/**
* foreach 标签
* @param ids
* @return
*/
int delByIds(List ids);
delete from userinfo
where id in
#{id}
@Test
void delByIds() {
List list = new ArrayList(){{
add(1);
add(2);
add(3);
}};
int ret = userMapper.delByIds(list);
System.out.println(ret);
}