Mybatis-Plus之四种lambda方式LambdaQueryWrapper,QueryWrapper<实体>().lambda(),LambdaQueryChainWrapper<实体>

这篇具有很好参考价值的文章主要介绍了Mybatis-Plus之四种lambda方式LambdaQueryWrapper,QueryWrapper<实体>().lambda(),LambdaQueryChainWrapper<实体>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mybatis-Plus之四种lambda方式

lambda四种表达形式

前言

使用了lambda表达式 可以通过方法引用的方式来使用实体字段名的操作,避免直接写数据库表字段名时的错写名字;

一、LambdaQueryWrapper<>

 /**
      * lambda 条件构造器
      * 生成的sql语句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
      */
     @Test
     public void selectLambda() {
         //创建lambda 条件构造器 的三种方法
 //        LambdaQueryWrapper<User> lambda2 = new LambdaQueryWrapper<>();
 //        LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
         LambdaQueryWrapper<User> lambda3 = Wrappers.<User>lambdaQuery();
         lambda3.like(User::getName, "雨").lt(User::getAge, 40);
         List<User> users = userMapper.selectList(lambda3);
         users.forEach(System.out::println);
     }

二、QueryWrapper<实体>().lambda()

 /**
  * 名字为王姓并且(年龄小于40并且邮箱不为空)
  * name like '王%' and (age <40 or email in not null)
  * 生成的sql语句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
  */
 @Test
 public void selectLambda2() {
     LambdaQueryWrapper<User> lambda3 = Wrappers.<User>lambdaQuery();
     lambda3.likeRight(User::getName, "王").and(qw -> qw.lt(User::getAge, 40).or().isNotNull(User::getEmail));
 
     List<User> users = userMapper.selectList(lambda3);
     users.forEach(System.out::println);
 }

三、Wrappers.<实体>lambdaQuery(),Wrappers.lambdaQuery(实体.class)

Wrappers.<实体>lambdaQuery()

  /**
   * 自定义sql 使用
   * Dao层  代码:
   *
   * @Select("select * from ${ew.customSqlSegment}")
   * List<User> selectAll(@Param(Constants.WRAPPER)Wrapper<User> wrapper);
   */
  @Test
  public void selectLambda4my() {
      LambdaQueryWrapper<User> lambda3 = Wrappers.<User>lambdaQuery();
      lambda3.likeRight(User::getName, "王").and(qw -> qw.lt(User::getAge, 40).or().isNotNull(User::getEmail));
  
      List<User> users = userMapper.selectAll(lambda3);
      users.forEach(System.out::println);
  }

Wrappers.lambdaQuery(实体.class)
Mybatis-Plus之四种lambda方式LambdaQueryWrapper,QueryWrapper<实体>().lambda(),LambdaQueryChainWrapper<实体>

四、LambdaQueryChainWrapper<实体>(xxxxMapper)

 /**
  * lambda 条件构造器第四种创建方式 MP 3.0.7 新增的方式
  * 生成的sql语句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age >= ?
  * 这个例子可以看出  代码更简洁了
  * 生成的sql语句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age >= ?
  */
 @Test
 public void selectLambda3() {
     List<User> users = new LambdaQueryChainWrapper<User>(userMapper)
             .like(User::getName, "雨").ge(User::getAge, 20).list();
 
     users.forEach(System.out::println);
 }

QueryWrapper、LambdaQueryWrapper以及LambdaQueryChainWrapper用法

一、QueryWrapper

 .like("email", "24252") //email对应数据库中列名
  /**
       * 条件构造器 查询操作
       */
      @Test
      void TestQueryWrapperSelect() {
          //1、条件用法
          List<User> userList = userMapper.selectList(new QueryWrapper<User>()
                  .like("email", "24252")
                  .between("age", 20, 22)
                  .or()
                  .eq("name", "zcx")
          );
          System.out.println("userList:" + userList);
  
          //2、排序用法
          List<User> users = userMapper.selectList(new QueryWrapper<User>()
                  .eq("nick_name", "xx")
                  .orderByAsc("age")  //升序
  //                .orderByDesc("age") //降序
                  .last("limit 0,3") //last用法:在sql末尾添加sql语句,有sql注入风险
          );
          System.out.println("users:"+users);
  
      }

二、LambdaQueryWrapper

  queryWrapper.eq(User::getName,"liangd1"); //可以通过Lambda获取数据库列名
 @Test
     void TestLambdaQueryWrapper() {
         //1、查询单条
         LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(User::getName,"liangd1");
         User selectOne = userMapper.selectOne(queryWrapper);
         System.out.println(selectOne);
 
         //2、查询list以及统计条数
         queryWrapper.eq(User::getName, "zcx");
         List<User> userList = userMapper.selectList(queryWrapper);
         System.out.println("userList:" + userList);
         Integer result = userMapper.selectCount(queryWrapper);
         System.out.println("result:" + result);
     }

三、LambdaQueryChainWrapper

 //链式查询方式
 User one = new LambdaQueryChainWrapper<>(userMapper)
                   .eq(User::getName, "liangd1")
                   .one();
  @Test
      void TestLambdaQueryChainWrapper() {
          //1、eq查询单条
          User one = new LambdaQueryChainWrapper<>(userMapper)
                  .eq(User::getName, "liangd1")
                  .one();
          System.out.println("UserOne:" + one);
  
          //2、查询list
          List<User> users = new LambdaQueryChainWrapper<>(userMapper)
                  .eq(User::getName, "zcx")
                  .list();
          System.out.println("UserList:" + users);
  
          //3、模糊查询
          List<User> LikeList = new LambdaQueryChainWrapper<>(userMapper)
                  .like(User::getEmail, "test")
                  .list();
          System.out.println("LikeUser:" + LikeList);
      }

QueryWrapper及LambdaQueryWrapper

实体类

@Data
public class BannerItem {

    private Long id;

    private String name;

    private String img;

    private String keyword;

    private Integer type;

    private Long bannerId;
}

QueryWrapper

最基础的使用方式是这样

// 查询条件构造器
QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.eq("banner_id", id);
// 查询操作
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);

然后我们可以引入lambda,避免我们在代码中写类似的于banner_id的硬编码

QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);

LambdaQueryWrapper

为了简化lambda的使用,我们可以改写成LambdaQueryWrapper构造器,语法如下:

两种写法
new QueryWrapper().lambda();
Wrappers.lambdaQuery();

LambdaQueryWrapper<BannerItem> wrapper = new QueryWrapper<BannerItem>().lambda();
// LambdaQueryWrapper<BannerItem> wrapper = Wrappers.lambdaQuery(); // 两种写法

wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);

我们可以再次将QueryWrapper.lambda()简化,变成这个样子

BannerItem bannerItem = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getId, id)
                        .one();

链式查询

MyBatis-Plus还提供了一种链式查询的方式,和上面的代码效果一样。
但是这种写法偏向于炫技,可读性没有上面的代码强,大家可以根据需要自行选择方式。

List<BannerItem> bannerItems = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getBannerId, id)
                        .list();

如果只想查询一条记录,例如通过id查询某条记录的详情,使用.one()即可,例如

BannerItem bannerItem = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getId, id)
                        .one();

lambdaQueryWrapper中常用方法

Mybatis-Plus之四种lambda方式LambdaQueryWrapper,QueryWrapper<实体>().lambda(),LambdaQueryChainWrapper<实体>文章来源地址https://www.toymoban.com/news/detail-410226.html

到了这里,关于Mybatis-Plus之四种lambda方式LambdaQueryWrapper,QueryWrapper<实体>().lambda(),LambdaQueryChainWrapper<实体>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot学习随笔- 集成MyBatis-Plus(二)条件查询QueryWrapper、聚合函数的使用、Lambda条件查询

    学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 普通查询 条件构造器查询 【重要】 AbstractWrapper  是 MyBatis Plus 中的一个抽象类,用于构建 SQL 查询条件。定义了泛型  T 、 C  和  Children 。其中, T  表示实体类的类型, C  表示查

    2024年02月04日
    浏览(44)
  • mybatis-plus分页方式

    概述 MyBatisPlus中提供的(自带的)分页插件,非常简单,只需要简单的配置就可以实现分页功能。 详细步骤: 第一步::config.MybatisPlusConfig.java:配置类,配置mybatisplus的插件功能。 第二步:验证(测试): 官网介绍: IXxxService.java: XxxServiceImpl.java: XxxController.java 业务(

    2024年02月16日
    浏览(33)
  • mybatis-plus配置日志实现方式

    Mybatis-plus是一个基于Mybatis的强大框架,可以帮助开发者快速地开发高质量的数据库应用程序。Mybatis-plus提供了许多配置项,其中一个重要的配置项是log-impl。 log-impl配置项定义了Mybatis-plus的日志实现方式,有两种可选的方式: SLF4J日志实现 如果你的项目已经使用了SLF4J日志框

    2024年02月09日
    浏览(69)
  • MyBatis-plus的批量插入方式对比分析

      【摘要】Mybatis批量插入一直是开发者重点关注的问题,本文列举了Mybatis的五种插入方式进行对比分析,验证了五种批量插入的方式的优先级。   略。 1、编写UserService服务类,测试一万条数据的耗时情况: 2、编写UserMapper接口 3、编写UserMapper.xml文件 4、进行单元测试

    2024年02月07日
    浏览(41)
  • 【Java系列】Mybatis-Plus 使用方式介绍

    Mybatis-Plus 提供了多种方式来执行 SQL,包括使用注解、XML 映射文件和 Lambda 表达式等。其中,使用 Lambda 表达式是 Mybatis-Plus 推荐的方式,因为它更加直观和类型安全。 以下是一个使用 Lambda 表达式执行 SQL 的示例,现在我们有一个名为  User  的实体类,其中包含  id 、 name  

    2024年02月07日
    浏览(80)
  • mybatis-plus进行update的三种方式

    2024年02月12日
    浏览(42)
  • mybatis-plus update更新操作(三种方式)

    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 愿景 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 方式一(UpdateWrapper 条件构造器) 方

    2024年02月11日
    浏览(49)
  • Mybatis-Plus批量添加或修改数据的三种方式

    提供的方法 是遍历每一个元素,判断主键是否存在,如果存在则做更新,不存在添加 先获取表中所有的主键 ,然后 判断是否已存在,存在更新,不存在添加 on duplicate key update 是Mysql特有的语法,如下图所示,表中id 为主键 再插入id为1的数据,则提示主键已存在 改成如下

    2024年02月06日
    浏览(32)
  • 【Java】Mybatis Plus LambdaQueryWrapper梳理

    为了更方便的实现动态 SQL,Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了 更加简便的查询语法 ,同时也 避免了 SQL 注入 的风险。 LambdaQueryWrapper 实现了 QueryWrapper 的全部功能,并提供了基于 Lambda 表达式的查询方式,使得查询语法更加优雅。使用 LambdaQ

    2024年02月09日
    浏览(41)
  • No Spring环境Mybatis-Plus批量插入并返回主键的两种方式

    批量插入,可以把Mybatis-Plus看作是Mybatis加强版;故Mybatis中的相关操作都可以在Mybatis-Plus中使用;在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了。 下面是批量插入的Dao层接口    一注解方式:      直接撸代码:      第二种: XML方

    2024年02月09日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包