前言
本篇博文是关于LambdaQueryWrapper -的使用说明,希望你能够喜欢
个人主页:晨犀主页
个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力
欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦
//我们编写方法,使用LambdaQueryWrapper封装查询条件,完成检索
@GetMapping("/furnsBySearchPage2")
public Result listFurnsByConditionPage2(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
@RequestParam(defaultValue = "") String search) {
//说明:关于lambda表达式, 我们这里使用的是 类名::实例方法
//是lambda方法引用中一个不太容易理解的知识点
//后面我们使用到每个lambda表达式式时候,就会有针对性进行讲解-这样理解的就非常深刻的心得体会: 多用几次,就熟悉了,不用背
//解读
//1. Furn::getName 就是通过lambda表达式引用实例方法 getName
//2. 这里就是把 Furn::getName 赋给 SFunction 函数式接口 ? 函数式接口一会再说明
//3. 看看 SFunction 源码
/**
* @FunctionalInterface
* public interface SFunction extends Function, Serializable {
* }
* 父接口
* @FunctionalInterface
* public interface Function {
* R apply(T t); //抽象方法: 表示根据类型T的参数,获取类型R的结果
*
* //后面还有默认实现方法
* }
*4. 传入 Furn::getName 后, 就相当于实现了 SFunction 的apply方法
*5. 底层会根据 传入的 Furn::getName 去得到该方法的对应的属性映射的表的字段, 可以更加灵活
*6. 回顾一下mybatis 在xxMapper.xml 中有 ResultMap 会体现 Bean的属性和表的字段的映射关系
*
*
*/
//创建LambdaQueryWrapper,封装检索询件
LambdaQueryWrapper<Furn> lambdaQueryWrapper = Wrappers.<Furn>lambdaQuery();
//判断search
if (StringUtils.hasText(search)) {
//lambdaQueryWrapper.like(Furn::getName,search);
//换一个写法-小伙伴可能会清晰, 这时使用依然是正确
SFunction<Furn, Object> sf = Furn::getName;
lambdaQueryWrapper.like(sf, search);
}
Page<Furn> page = furnService.page(new Page<>(pageNum, pageSize), lambdaQueryWrapper);
log.info("page={}", page.getRecords());
return Result.success(page);
}
public class Test {
public static void main(String[] args) {
//传统的方式来实现NlcFunction/得到一个实现接口的对象 可以使用
//匿名内部类
//NlcFunction hf = new NlcFunction() {
// @Override
// public String apply(Desk desk) {
// return "hello desk";
// }
//};
//String val = hf.apply(new Desk());
//System.out.println("val-" + val);
NlcFunction<Desk,String> hf2 = Desk::getBrand;
String val2 = hf2.apply(new Desk());
System.out.println("val2-" + val2);
NlcFunction<Desk,Object> hf3 = Desk::getId;
}
}
//定义一个函数式接口: 有且只有一个抽象方法的接口
//我们可以使用@FunctionalInterface 来标识一个函数式接口
//NlcFunction是一个函数式接口 (是自定义泛型接口)
@FunctionalInterface
interface NlcFunction<T, R> {
R apply(T t); //抽象方法: 表示根据类型T的参数,获取类型R的结果
//public void hi();
//函数式接口,依然可以有多个默认实现方法
default public void ok() {
System.out.println("ok");
}
}
@FunctionalInterface
interface HspInterface {
public void hi();
}
class Desk { //Bean
private String name = "wyx desk";
private String brand = "北京牌";
private Integer id = 10;
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public String getBrand() {
return brand;
}
}
热门专栏推荐
Thymeleaf快速入门及其注意事项
Spring Initailizr–快速入门–SpringBoot的选择
带你了解SpringBoot支持的复杂参数–自定义对象参数-自动封装
Rest 优雅的url请求处理风格及注意事项
文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力