国内做网站网站代理,电子商务网站建设与维护概述,代注册各类app,重庆seowhy整站优化引言为什么要了解Wrapper#xff1f;Wrapper解决的了什么问题#xff1f;一、Wrapper#xff1a;条件构造抽象类#xff0c;用来解决单表操作出现的一些复杂问题,例如排序#xff0c;和模糊查询等等结构图文字解释AbstractWrapper #xff1a; 用于查询条件封装#xff…引言为什么要了解WrapperWrapper解决的了什么问题一、Wrapper条件构造抽象类用来解决单表操作出现的一些复杂问题,例如排序和模糊查询等等结构图文字解释AbstractWrapper 用于查询条件封装生成 sql 的 where 条件 QueryWrapper 查询条件封装 UpdateWrapper Update 条件封装 AbstractLambdaWrapper 使用Lambda 语法LambdaQueryWrapper 用于Lambda语法使用的查询Wrapper LambdaUpdateWrapper Lambda 更新封装Wrapper 二、Wrapper的子类解读QueryWrapper 组装查询条件代码段如下 Autowiredprivate UserMapper userMapper;Testpublic void test01() {
// 查询条件 用户名包含a年龄在20-30之间邮箱.comQueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.like(name, a).between(age, 20, 30).isNotNull(email);ListUser list userMapper.selectList(queryWrapper);list.forEach(System.out::println);userMapper.selectList(条件构造器)QueryWrapper条件构造器的创建过程 QueryWrapperUser queryWrapper new QueryWrapper();//创建QueryWrapper对象queryWrapper.like(name, a)//模糊查询.between(age, 20, 30)//查询条件在20-30之间.isNotNull(email);//判断不为空的条件gtgreater than大于ltless than 小于like模糊查询between两者之间格式为“列名称”传入相应的值组装删除代码段如下Test
public void test03(){//删除email为空的用户QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.isNull(email);//条件构造器也可以构建删除语句的条件int result userMapper.delete(queryWrapper);System.out.println(受影响的行数 result);
}条件的优先级 代码段如下Test
public void test04() {QueryWrapperUser queryWrapper new QueryWrapper();//将年龄大于20并且用户名中包含有a或邮箱为null的用户信息修改//UPDATE t_user SET age?, email? WHERE (username LIKE ? AND age ? ORemail IS NULL)queryWrapper.like(username, a).gt(age, 20).or().isNull(email);User user new User();user.setAge(18);user.setEmail(useratguigu.com);int result userMapper.update(user, queryWrapper);System.out.println(受影响的行数 result);}查询和删除使用的一般都为QueryWrapper2.UpdateWrapper 组装更新Test
public void test07() {//将年龄大于20或邮箱为null并且用户名中包含有a的用户信息修改//组装set子句以及修改条件UpdateWrapperUser updateWrapper new UpdateWrapper();//lambda表达式内的逻辑优先运算updateWrapper.set(age, 18)//修改类型的值.set(email, useratguigu.com)//修改类型的值.like(username, a).and(i - i.gt(age, 20).or().isNull(email));//或运算的方法并且要在and里面才可以用int result userMapper.update(null, updateWrapper);System.out.println(result);
}这里为了解决年龄大于或为null并name包含a的信息修改或这里因为需要连载一起数学符号表示为a | bc这里条件构造器就用到了andi-i.限制条件的方法3.condition 目的在真正开发的过程中组装条件是常见的功能而这些条件数据来源于用户输入是可选的因 此我们在组装这些条件时必须先判断用户是否选择了这些条件若选择则需要组装该条件若 没有选择则一定不能组装以免影响SQL执行的结果 condition使用代码Test
public void test08() {//定义查询条件有可能为null用户未输入或未选择String username null;Integer ageBegin 10;Integer ageEnd 24;QueryWrapperUser queryWrapper new QueryWrapper();//StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成if(StringUtils.isNotBlank(username)){queryWrapper.like(username,a);}if(ageBegin ! null){queryWrapper.ge(age, ageBegin);}if(ageEnd ! null){queryWrapper.le(age, ageEnd);}ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}可以有效的放置输入的字符是不是正确的4.LambdaQueryWrapper 将放置输入输出错误的思想带入直接进行有效的输入Test
public void test09() {//定义查询条件有可能为null用户未输入String username a;Integer ageBegin 10;Integer ageEnd 24;LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper();//避免使用字符串表示字段防止运行时错误queryWrapper.like(StringUtils.isNotBlank(username), User::getName, username).ge(ageBegin ! null, User::getAge, ageBegin).le(ageEnd ! null, User::getAge, ageEnd);ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}5.LambdaUpdateWrapper Test
public void test10() {//组装set子句LambdaUpdateWrapperUser updateWrapper new LambdaUpdateWrapper();updateWrapper.set(User::getAge, 18).set(User::getEmail, useratguigu.com).like(User::getName, a).and(i - i.lt(User::getAge, 24).or().isNull(User::getEmail)); //lambda表达式内的逻辑优先运算User user new User();int result userMapper.update(user, updateWrapper);System.out.println(受影响的行数 result);
}总结Wrapper的提出很好的解决了模糊查询Wrapper条件构造器解决了大部分单表操作的数据UpdateWrapper 用于更新操作QueryWrapper用于删除和查询操作