杭州海淀区网站建设山东今日热搜
MybatisPlus------条件构造器Wapper(七)
Wrapper:条件构造器抽象类,最顶端父类
AbstarctWrapper:用于查询条件封装,生成sql的where条件。
QueryWrapper:查询条件封装(可以用于查询、删除,更新)
UpdateWrapper:Update条件封装
AbstractLambdaWrapper:使用Lambda语法
LambdaUpdateWrapper:用于Lambda语法使用的查询Wrapper
LambdaQueryWrapper:用于Lambda语法使用的更新Wrapper
使用QueryWrapper进行更新
@Testpublic void testUpdate(){// 将(年龄大于20,并且用户名中包含有a)或邮箱为null的信息修改//where条件QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();baseProcedureQueryWrapper.gt("age",20).like("procedure_name","a").or().isNull("eamil");//更新值BaseProcedure baseProcedure = new BaseProcedure();baseProcedure.setProcedureName("asdasd");int update = baseProcedureMapper.update(baseProcedure, baseProcedureQueryWrapper);System.out.println("update"+update);}
涉及到条件优先级怎么处理?
涉及到where子句后判断的优先级时(lambda中的条件优先执行),
例如:
将用户名中包含有a并且(年龄大于20或邮箱为null)的信息修改
@Testpublic void testUpdate2(){// 将用户名中包含有a并且(年龄大于20或邮箱为null)的信息修改//where条件//涉及到lambda表达式,lambda中的条件优先执行QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();baseProcedureQueryWrapper.like("procedure_name","a").and(i ->{i.gt("age",20).or().isNull("eamil");});//更新值BaseProcedure baseProcedure = new BaseProcedure();baseProcedure.setProcedureName("asdasd");int update = baseProcedureMapper.update(baseProcedure, baseProcedureQueryWrapper);System.out.println("update"+update);}
and()和or()中的Consumer怎么理解?
and()方法源码:
/*** 查询条件封装* <p>嵌套</p>* <li>泛型 Param 是具体需要运行函数的类(也是 wrapper 的子类)</li>** @author hubin miemie HCL* @since 2017-05-26*/
public interface Nested<Param, Children> extends Serializable {/*** ignore*/default Children and(Consumer<Param> consumer) {return and(true, consumer);}
Param是泛型,是具体需要运行函数的类,也就是 wrapper 的子类,就是条件构造器,因此可以将条件构造器写入and方法中。
而Consumer,是Lambda表达式中的消费者接口,消费者接口中一定是由参数的,方法中的内容就是我们对参数的操作方式,
仅需要查询部分字段如何写?
通过调用QueryWrapper的select()方法,在该方法里传入需要查询的字段即可。
@Testpublic void testSelect(){//查询用户用户名,和用户编码QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();baseProcedureQueryWrapper.select("procedure_code","procedure_name");List<Map<String, Object>> maps = baseProcedureMapper.selectMaps(baseProcedureQueryWrapper);maps.forEach(System.out::println);}
子查询如何操作
通过inSql方法,传入字段,以及子查询sql即可。
案例比较简单,仅仅用来测试,无实际意义
@Testpublic void testSelect02(){//子查询//SELECT * from base_procedure//WHERE id = (SELECT id from base_procedure WHERE id = 'ef5397a26b7a469c6fe1de0e')QueryWrapper<BaseProcedure> baseProcedureQueryWrapper = new QueryWrapper<>();baseProcedureQueryWrapper.inSql("id","SELECT id from base_procedure WHERE id = 'ef5397a26b7a469c6fe1de0e'");List<Map<String, Object>> maps = baseProcedureMapper.selectMaps(baseProcedureQueryWrapper);maps.forEach(System.out::println);}