首页 > 其他分享 >简单学懂LambdaQueryWrapper

简单学懂LambdaQueryWrapper

时间:2023-04-22 15:11:06浏览次数:45  
标签:LambdaQueryWrapper 实体类 使用 wrapper 查询 学懂 简单 Lambda

简单学懂LambdaQueryWrapper

一句话定义

通过调用构造方法返回一个LambdaQueryWrapper对象,在对象上使用链式编程
、Lambda表达式和链式调用的方式,灵活地实现了SQL查询条件构造和简化了SQL查询代码的编写。

一个流程看懂

创建一个LambdaQueryWrapper对象 -> 使用Lambda表达式或方法引用构造查询条件 -> 调用MyBatis-Plus提供的方法获取查询结果。

盐焗小宇宙

用法

首先,我们定义了一个UserDao接口集成自BaseMapper<User>,它提供了许多基础的CRUD方法。

public interface UserDao extends BaseMapper<User> {
}

然后,定义了一个示例Service类UserService,它使用了@Autowired注解注入了UserDao对象,用于操作数据库。

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public List<User> listUsersByGender(String gender) {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getGender, gender).orderByDesc(User::getCreateTime);
        
        /**
          *LambdaQueryWrapper常用方法
          */
         wrapper.eq("实体类::查询字段", "条件值"); //相当于where条件
         wrapper.between("实体类::查询字段", "区间一", "区间二");//相当于范围内使用的between
         wrapper.like("实体类::查询字段", "模糊查询的字符"); //模糊查询like
         wrapper.groupBy("实体类::查询字段");  //相当于group by分组
         wrapper.in("实体类::查询字段", "包括的值,分割"); //相当于in
         wrapper.orderByAsc("实体类::查询字段"); //升序
         wrapper.orderByDesc("实体类::查询字段");//降序
         wrapper.ge("实体类::查询字段", "要比较的值"); //大于等于
         wrapper.le("实体类::查询字段", "要比较的值"); //小于等于
        
        return userDao.selectList(wrapper);
    }
}

上面的代码展示了通过LambdaQueryWrapper进行查询的基本步骤。

  1. 首先,我们定义了一个UserDao接口集成自BaseMapper<User>,它提供了许多基础的CRUD方法。

    CRUD方法:指封装了数据库语句的增删改查方法。

  2. 然后定义了一个示例Service类UserService,它使用了@Autowired注解注入了UserDao对象,用于操作数据库。

  3. UserService类的listUsersByGender方法中,我们首先创建了一个LambdaQueryWrapper<User>对象,它用于构造查询条件。

  4. 然后,我们使用eq方法添加查询条件,该方法使用Lambda表达式指定了查询对象的属性以及需要查询的值。接下来,我们使用orderByDesc方法通过Lambda表达式指定了查询结果的排序方式。最后,我们使用selectList方法获取符合条件的查询结果。

  5. 在实际使用中,我们可以根据需要在LambdaQueryWrapper对象中使用更多的方法来构建查询条件。在Lambda表达式中,我们可以通过::符号指定查询对象的属性。orderby、select等方法可用于指定查询结果的排序方式和返回的列等。

  6. 需要注意的是,为了确保MySQL和Java类的字段名称一致,我们需要在MySQL中将列名和Java Bean属性名定义一致。这样,在查询数据时,MyBatis-Plus就会自动映射数据库表和Java Bean对象的属性,使我们能够更方便地进行数据操作。

Q&A

Q1:LambdaQueryWrapper返回的查询结果是什么类型?

A1:LambdaQueryWrapper返回的查询结果通常是由 MyBatis-Plus 提供的IBaseMapper中的方法返回的类型。(IBaseMapper是一个基础的Mapper接口, 提供了很多基础的CRUD操作,如insert、update、delete、select等。)查询结果的类型通常是一个Java Bean对象或一组Java Bean对象的集合,它们由IBaseMapper中的方法返回并由MyBatis进行映射。 例如,当使用selectList方法查询时,返回的是一个泛型为Java Bean的List集合;当使用selectOne查询时,返回一个Java Bean对象。

Q2:LambdaQueryWrapper和QueryWrapper有什么主要区别?

A2:

  • LambdaQueryWrapper和QueryWrapper都是MyBatis-Plus框架中提供的查询条件构造器,它们的主要区别在于:使用Lambda表达式和方法引用构造查询条件、类型安全(有编译时校验)和代码简洁方便。
  • 具体来说,LambdaQueryWrapper支持使用Lambda表达式和方法引用构建查询条件,它需要使用IDEA等编辑工具来支持Lambda表达式,需要jdk1.8及以上的版本支持。 而QueryWrapper则使用拼接字符串的方式来构造查询条件,它的使用方法与JdbcTemplate等框架非常相似。
  • 在使用LambdaQueryWrapper时,代码更加类型安全,因为使用了Lambda表达式的编译时校验,可以避免一些由于类型不匹配或写错列名等问题导致的运行时异常。此外,使用LambdaQueryWrapper时,代码更加简洁和易读,可以大大提高开发效率。
  • 总的来说,如果你是使用jdk1.8及以上版本和IDEA等编辑工具进行开发,推荐使用LambdaQueryWrapper,否则使用QueryWrapper。但需要注意的是,如果你需要用到某些QueryWrapper特有的方法,建议还是使用QueryWrapper。

写在最后

如果文中有什么问题和错误的话,欢迎斧正。

参考以下内容,如有侵权,请联系作者删除
Mybatis-Plus高级之LambdaQueryWrapper,Wrappers.<实体类>lambdaQuery的使用

标签:LambdaQueryWrapper,实体类,使用,wrapper,查询,学懂,简单,Lambda
From: https://www.cnblogs.com/salt-baked-universe/p/17330602.html

相关文章

  • Java中递归的简单应用
    递归是一种非常常见的编程技巧,它可以将一个复杂的问题分解成更小的问题,然后递归地解决这些小问题,最终得到整个问题的解。递归的本质就是函数调用自身。我们来看一个简单的例子:计算阶乘。阶乘是指将一个数和它以及它之前的所有正整数相乘的结果,通常用符号"!"表示。例如,5的阶乘就是......
  • 前端工具vscode将英文设置中文简单方便
    按照步骤来: 右下角会有提示,点击重启即可 然后vscode就变成中文的了 ......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之007 week01 02-07 简单的复杂度分析
    1、复杂度分析复杂度分析本身是非常理论化的一个内容,在计算机科学中,有一个专门的学科叫做——计算复杂性理论。很多童鞋看过《算法导论》,这本书的内容很多很强调算法导论。但是实际上,对于普通程序员来说,不需要过度强调理论化的内容。因为工作中更多面对的是实际的软件工程,工程化的......
  • 最简单搭建个人博客教程
    1. 安装宝塔面板yuminstall-ywget&&wget-Oinstall.shhttp://download.bt.cn/install/install_6.0.sh&&shinstall.sh2.安装常用软件LAMP 3.通过宝塔插件安装Wordpress,(不用试我的密码哈,全都是临时的,等下安装完成我全删了)3.登陆,并填写数据密码信息填......
  • 最简单安装安装宝塔面板教程 linux Center os
    1.执行命令,下载并安装宝塔面板,yuminstall-ywget&&wget-Oinstall.shhttp://download.bt.cn/install/install_6.0.sh&&shinstall.sh 安装完成后会显示地址账号密码2. 直接登陆即可 ......
  • SpringMVC 简单的开始
    SpringMVC简单的开始利用Spring模板配置写一个web项目。1.核心配置文件(模板代码)<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • Laravel10 简单使用 Auth 生成 Token 与登录并获取用户信息
    参考https://learnku.com/docs/laravel/10.x/authenticationmd/14876https://learnku.com/docs/laravel/10.x/sanctummd/14914https://learnku.com/articles/39646环境软件/系统版本说明windows10php8.2.5-nts-Win32-vs16-x64composer2.5.5larave......
  • Mysql分布式锁的简单实现
    在做多线程操作数据库时避免不了的会遇到线程之间争抢同一条记录的问题,在mysql里可以实现分布式锁解决线程的反复调用问题。具体方法是利用数据库的唯一约束,设置一个比如状态的列来判断此记录是否正在被线程处理,可以默认值为0,表示未被处理,当值变为1时表示正在处理,值为2时......
  • kingpin 简单强大命令行
    功能比flag库强大,用法差不多。相比flag库,最重要的一点就是支持不加"-"的调用。实例helloworldpackagemainimport("fmt""gopkg.in/alecthomas/kingpin.v2")var(debug=kingpin.Flag("debug","Enabledebugmode.").Bool()t......
  • Springboot 使用nacos鉴权的简单步骤
    Springboot使用nacos鉴权的简单步骤背景前端时间nacos爆出了漏洞.因为他的默认token固定,容易被利用.具体的问题为:QVD-2023-6271漏洞描述:开源服务管理平台Nacos中存在身份认证绕过漏洞,在默认配置下未token.secret.key进行修改,导致远程攻击者可以绕过密钥认证进入......