栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Mybatis-Plus之四种lambda方式

lambda四种表达形式

前言

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

一、LambdaQueryWrapper<>
 
     @Test
     public void selectLambda() {
         //创建lambda 条件构造器 的三种方法
 //        LambdaQueryWrapper lambda2 = new LambdaQueryWrapper<>();
 //        LambdaQueryWrapper lambda = new QueryWrapper().lambda();
         LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery();
         lambda3.like(User::getName, "雨").lt(User::getAge, 40);
         List users = userMapper.selectList(lambda3);
         users.forEach(System.out::println);
     }
二、QueryWrapper<实体>().lambda()
 
 @Test
 public void selectLambda2() {
     LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery();
     lambda3.likeRight(User::getName, "王").and(qw -> qw.lt(User::getAge, 40).or().isNotNull(User::getEmail));
 
     List users = userMapper.selectList(lambda3);
     users.forEach(System.out::println);
 }
三、Wrappers.<实体>lambdaQuery(),Wrappers.lambdaQuery(实体.class)

Wrappers.<实体>lambdaQuery()

  
  @Test
  public void selectLambda4my() {
      LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery();
      lambda3.likeRight(User::getName, "王").and(qw -> qw.lt(User::getAge, 40).or().isNotNull(User::getEmail));
  
      List users = userMapper.selectAll(lambda3);
      users.forEach(System.out::println);
  }

Wrappers.lambdaQuery(实体.class)

四、LambdaQueryChainWrapper<实体>(xxxxMapper)
 
 @Test
 public void selectLambda3() {
     List users = new LambdaQueryChainWrapper(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 userList = userMapper.selectList(new QueryWrapper()
                  .like("email", "24252")
                  .between("age", 20, 22)
                  .or()
                  .eq("name", "zcx")
          );
          System.out.println("userList:" + userList);
  
          //2、排序用法
          List users = userMapper.selectList(new QueryWrapper()
                  .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 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 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 users = new LambdaQueryChainWrapper<>(userMapper)
                  .eq(User::getName, "zcx")
                  .list();
          System.out.println("UserList:" + users);
  
          //3、模糊查询
          List 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 wrapper = new QueryWrapper<>();
wrapper.eq("banner_id", id);
// 查询操作
List bannerItems = bannerItemMapper.selectList(wrapper);

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

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

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

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

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

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

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

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

链式查询

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

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

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

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

lambdaQueryWrapper中常用方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931073.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号