尚硅谷MyBatisPlus学习记录3
我正在往河里撒沙子。
一、wapper介绍
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
二、AbstractWrapper
1.ge、gt、le、lt、isNull、isNotNull
代码如下(示例):
//1、ge 大于且等于、gt 大于、le 小于且等于、lt 小于、isNull 字段为null 、isNotNull 字段不为null
@Test
public void testSelect1(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// queryWrapper.lt("age",21);
// queryWrapper.isNull("age");
// queryWrapper.isNotNull("version");
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
}
2.eq、ne
代码如下(示例):
//2、eq 内容相同、ne 内容不同
@Test
public void testSelect2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("name", "台灯");
queryWrapper.ne("name","爱情");
List<User> users = userMapper.selectList(queryWrapper);
for (User user : users) {
System.out.println(user);
}
// User user = userMapper.selectOne(queryWrapper);
}
3.between、notBetween
@Test
public void testSelect3(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// queryWrapper.between("age",20,26);
queryWrapper.notBetween("age",20,30);
List<User> users = userMapper.selectList(queryWrapper);
Integer integer = userMapper.selectCount(queryWrapper);
System.out.println(integer);
System.out.println(users);
}
4、allEq
@Test
public void testSelect4(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
HashMap<String, Object> map = new HashMap<>();
map.put("name","台灯");
map.put("id",1597452393308487681L);
map.put("age",null);
queryWrapper.allEq(map);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
5.like、notLike、likeLeft、likeRight
@Test
public void testSelect5(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// queryWrapper.like("name","i");
queryWrapper.notLike("email","e").likeRight("name","l");
List<Map<String, Object>> list = userMapper.selectMaps(queryWrapper);
list.forEach(System.out::println);
}
6.in、notIn、inSql、notinSql、exists、notExists
in、notIn:
notIn(“age”,{1,2,3})—>age not in (1,2,3)
notIn(“age”, 1, 2, 3)—>age not in (1,2,3)
inSql、notinSql:可以实现子查询
例: inSql(“age”, “1,2,3,4,5,6”)—>age in (1,2,3,4,5,6)
例: inSql(“id”, “select id from table where id < 3”)—>id in (select id from table where id < 3)
@Test
public void testSelect6(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// queryWrapper.in("age",20,28,26);
queryWrapper.inSql("id","select id from user where id in (1,2,3)");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
7.or、and
不调用or则默认认为使用and连
//or、and 注:这是使用的是updateWrapper
@Test
public void testUpdate1(){
//修改值
User user = new User();
user.setAge(99);
user.setName("我的饮水杯");
//修改条件 不调用or,默认调用and
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper.like("name","a")
.or()
.between("age",20,25);
int result = userMapper.update(user, userUpdateWrapper);
System.out.println("修改了"+result+"行");
}
8.嵌套or、嵌套and
这里使用了lambda表达式,or中的表达式最后翻译成sql时会被加上圆括号
@Test
public void testUpdate2(){
User user = new User();
user.setAge(30);
user.setName("NewRuik");
//修改条件
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper.like("name","Rui")
.or(Sum -> Sum.eq("name","Sum").ne("age",20));
int update = userMapper.update(user, userUpdateWrapper);
System.out.println(update);
}
9.orderBy、orderByDesc、orderByAsc
@Test
public void testOrder(){
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.orderByAsc("age")
.orderByDesc("id");
List<User> users = userMapper.selectList(userQueryWrapper);
users.forEach(System.out::println);
}
10.last
//10.last 这个就不赘述了,容易找出sql注入的危险,且可以使用其他的代替。
@Test
public void testSelectListLast() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.last("limit 1");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
11.指定要查询的列
@Test
public void testSelectListColumn(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id", "name", "age");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
12.set、setSql
@Test
public void testSetsql(){
//修改值
User user = new User();
user.setAge(999);
//修改条件
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.like("name","水")
.set("name","耳机")
.setSql("email = '123456@qq.com'");
int update = userMapper.update(user,updateWrapper);
System.out.println("修改的行数为:"+ update);
}
总结
个人随便写写。