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 < ?*/@Testpublic 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 < ?*/@Testpublic 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);*/@Testpublic 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)
在这里插入图片描述

四、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 >= ?*/@Testpublic 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对应数据库中列名
  /*** 条件构造器 查询操作*/@Testvoid 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获取数据库列名
 @Testvoid 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();
  @Testvoid TestLambdaQueryChainWrapper() {//1、eq查询单条User one = new LambdaQueryChainWrapper<>(userMapper).eq(User::getName, "liangd1").one();System.out.println("UserOne:" + one);//2、查询listList<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中常用方法

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql怎么修改服务器角色,sql角色服务器的设置

sql角色服务器的设置 内容精选换一换如果您需要对华为云上购买的DDM资源&#xff0c;为企业中的员工设置不同的访问权限&#xff0c;为达到不同员工之间的权限隔离&#xff0c;您可以使用统一身份认证服务(Identity and Access Management&#xff0c;简称IAM)进行精细的权限管…

MyBatis-Plus——字段类型处理器TypeHandler

字段类型处理器&#xff08;TypeHandler&#xff09; 1&#xff0c;准备工作 &#xff08;1&#xff09;MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换&#xff0c;假设我们用户表中有一个联系方式字段&#xff0c;类型为字符串&#xff1a; &am…

额外参数_Pytorch获取模型参数情况的方法

分享人工智能技术干货&#xff0c;专注深度学习与计算机视觉领域&#xff01;相较于Tensorflow&#xff0c;Pytorch一开始就是以动态图构建神经网络图的&#xff0c;其获取模型参数的方法也比较容易&#xff0c;既可以根据其内建接口自己写代码获取模型参数情况&#xff0c;也可…

Mybatis-Plus之逻辑删除

概念 什么是逻辑删除 逻辑删除:假删除。将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。 数据库实现思路:插入数据时,标记为未删除状态;查询、修改时,只获取未删除状态的数据进行操作;删除时则更新删除状态为已删除…

查看分支编码_MySQL分支数据库MariaDB之CentOS安装教程

MariaDB数据库管理系统是MySQL的一个分支&#xff0c;由MySQL的创始人Michael Widenius主持开发。采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;在存储引擎方面&#xff0c;使用XtraDB(英语&#xff1a;XtraDB)来代替MySQL的InnoDB。1…

关联规则算法c语言样例及分析_推荐系统总结系列-关联规则算法(四)

基于关联规则的推荐有三种方法&#xff1a;Apriori关联规则算法FP Tree关联规则算法&#xff1b;PrefixSpan关联规则算法&#xff1b;关联规则挖掘推荐算法&#xff1a;关联规则挖掘是一种在大规模交易中识别类似规则关系模式的通用技术&#xff0c;可以应用到推荐系统中。交易…

Mysql - Innodb锁、事务与隔离级别

我们的数据库一般都会并发执行多个事务&#xff0c;多个事务可能会并发的对相同的一批数据进行增删改查操作&#xff0c;可能就会导致脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题&#xff0c;为了解决多事务并发问题&#xff0c;数据库…

语言非递归求解树的高度_算法素颜(11):无死角“盘”它!二分查找树

引言《菜鸟也能“种”好二叉树&#xff01;》一文中提到了&#xff1a;为了方便查找&#xff0c;需要进行分层分类整理。而满足这种目标的数据结构之一就是树。树的叶子节点可以看作是最终要搜寻的目标物&#xff1b;叶子节点以上的每一层&#xff0c;都可以看作是一个大类别、…

Mysql InnoDB存储引擎的锁相关

Mysql InnoDB存储引擎的锁相关 InnoDB下&#xff0c;mysql四个级别隔离下加锁操作 四个级别隔离的写操作都加X锁串行化下读加S锁select … for update, select … lock in share mode 分别加x锁&#xff0c;s锁在需要加锁的场景下&#xff0c;会根据情况使用三种加锁策略&…

显示器尺寸对照表_电脑显示器尺寸对照表一览,教你怎么选择最适合自己的显示器尺寸...

显示小课堂&#xff1a;显示器买大买小谁说了算&#xff1f; [本文来自&#xff1a;www.ii77.com]今天&#xff0c;笔者想和大家讨论一下关于显示器尺寸选择方面的问题。通过这两年显示器行业的发展我们不难看出&#xff0c;现在显示器的尺寸越来越大&#xff0c;三十几吋、四十…

MySQL事务隔离级别理解_解读MYSQL的可重复读、幻读及实现原理

前言 提到事务&#xff0c;你肯定不会陌生&#xff0c;最经典的例子就是转账&#xff0c;甲转账给乙100块&#xff0c;当乙的账户中到账100块的时候&#xff0c;甲的账户就应该减去100块&#xff0c;事务可以有效的做到这一点。 在MySQL中&#xff0c;事务支持实在引擎层实现的…

MySQL 是如何实现四大隔离级别的?

MySQL 是如何实现四大隔离级别的&#xff1f; 在mvcc下&#xff0c;mysql中用到的锁还是共享锁和排他锁么&#xff1f;如果是的话&#xff0c;那么是怎样结合锁和mvcc来实现rc和rr隔离级别的呢&#xff1f;还有mysql中在ru隔离级别下&#xff0c;两个事务同时读取数据对象A&am…

Linux命令 移动/复制文件/目录到指定目录下

1、同一个服务器下复制文件或文件夹 1.1 复制文件 复制文件&#xff1a;把1.txt 复制到根目录下的sbin目录 cp 文件名&#xff08;可带路径&#xff09;目标路径&#xff08;带路径&#xff09;如&#xff1a;cp 1.txt ~/sbin/1,2 复制目录 复制目录&#xff1a;把relea…

c mysql web开发实例教程_Web开发(六)MySql

数据库简介数据库(DB)数据库(database&#xff0c;DB)是指长期存储在计算机内的&#xff0c;有组织&#xff0c;可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储&#xff0c;具有较小的冗余&#xff0c;较高的数据独立性和易扩展性&#xff0c;并可为各种…

Git——工作中使用命令详解

1、Linux常用命令 cd&#xff1a;改变目录cd…&#xff1a;返回上级目录pwd&#xff1a;显示当前目录clear&#xff1a;清屏ls&#xff1a;显示当前目录所有文件touch&#xff1a;添加文件rm&#xff1a;删除文件mkdir&#xff1a;新建文件夹rm -r&#xff1a;删除文件夹mv&am…

Java中常见null简析

对于每一个Java程序员来说,null肯定是一个让人头痛的东西,今天就来总结一下Java中关于null的知识。 1.null不属于任何类型,可以被转换成任何类型,但是用instanceof永远返回false. 2.null永远不能和八大基本数据类型进行赋值运算等,否则不是编译出错,就是运行出错. 3.null可以…

Chrome浏览器F5和ctrl+F5的区别

一、正常重新加载&#xff08;F5&#xff0c;Ctrl R&#xff0c;在地址栏回车&#xff0c;点击链接&#xff09; 本节中的操作&#xff1a;根据缓存的缓存策略&#xff0c;进行处理。如果缓存没过期&#xff0c;就不向浏览器发请求&#xff0c;而是直接使用缓存。 F5或Contr…

mysql 自动生成mapper_自动生成实体类、Mapper、Mapper.xml文件

自动生成实体类、Mapper、Mapper.xml文件搭建Spring Boot Mysql MyBatis 项目核心配置pom.xml创建表配置文件生成文件结果项目结构搭建Spring Boot Mysql MyBatis 项目idea 可直接创建相应的项目及配置核心配置pom.xmlmysqlmysql-connector-java5.1.38org.springframework.…

使用Postman进行简单压力测试

使用Postman可以对服务端接口进行简单的压力测试&#xff0c;步骤如下&#xff1a; 1.配置好一个请求接口&#xff0c;保存在一个collection中&#xff1b; 2.点击Tests&#xff0c;添加断言检查点&#xff1b; 3.点击Runner按钮&#xff0c;打开Collection Runner界面&#…

mysql取消主从配置_mysql主从配置

搭建环境&#xff1a;master 192.168.127.131slave 192.168.127.128主从配置的前提&#xff1a;两个数据库的数据需要一模一样所以我们&#xff1a;在主上面建立一个数据库 在这里我们用mysql备份一下mysqldump db1 >123.sql (备份)在主上面建立一个数据库db1需要登录数据…