我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mybatis Plus 中的LambdaQueryWrapper示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mybatis Plus 中的LambdaQueryWrapper示例详解

前言

之前写过 Mybatis Plus 的基本配置和使用。

Mybatis-Plus 看这一篇就够了

当初在进行查询时,虽然没有写硬SQL进行查询数据库操作,但是也不是太友好!

QueryWrapper

为什么说不够友好,客官大姥爷们先看一个例子,假设数据库中,存在一个user表,表结构呢相对简单,如下所示:

CREATE TABLE user1
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

在使用mybatis-plus查询时,只需要编写pojo类,关联映射,如下所示:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "user1")
public class User1 implements Serializable {
    @TableId(value = "id")
    private Long id;
    @TableField(value = "name")
    private String userName;
    @TableField(value = "age")
    private Integer userAge;
    @TableField(value = "email")
    private String userEmail;
}

再编写一个持久层的mapper接口:

import cn.linkpower.pojo.User1;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

@Repository
public interface User1Mapper extends BaseMapper<User1> {
}

就能进行查询操作,如下所示:

import cn.linkpower.mapper.User1Mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LombokQueryTest {

    @Autowired
    private User1Mapper user1Mapper;

    @Test
    public void test(){
        QueryWrapper<User1> user1QueryWrapper = new QueryWrapper<>();
        user1QueryWrapper.eq("age",20);

        user1Mapper.selectOne(user1QueryWrapper);
    }
}

在这里插入图片描述

虽然很方便,但是这里需要注意一个问题:

在这里插入图片描述

QueryWrapper中的eqin等操作,第一个参数往往是列名

【问题:】这里就引申出一个问题:

如果实际开发中表结构经常改变,岂不是涉及到变动的列名相关代码都需要改!!!!

针对上面问题的出现,可以考虑使用LambdaQueryWrapper解决!

LambdaQueryWrapper

那么现在就变更表的列名。

新建一个类似的表。

表结构如下所示:

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	user_name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	user_age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	user_email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

INSERT INTO user (id, user_name, user_age, user_email) VALUE
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

依旧还是编写pojo类,实现映射对应关系:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "user")
public class User2 implements Serializable {

    @TableId(value = "id")
    private Long id;

    @TableField(value = "user_name")
    private String userName;
    @TableField(value = "user_age")
    private Integer userAge;
    @TableField(value = "user_email")
    private String userEmail;
}

编写一个持久层的接口:

import cn.linkpower.pojo.User2;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

@Repository
public interface User2Mapper extends BaseMapper<User2> {
}

编写测试类:

@Autowired
private User2Mapper user2Mapper;

@Test
public void test1(){
    LambdaQueryWrapper<User2> queryWrapper = new LambdaQueryWrapper();
    queryWrapper.eq(User2::getUserName,"Jack");
    User2 users = user2Mapper.selectOne(queryWrapper);
}

测试运行:

在这里插入图片描述

总结

从上面的QueryWrapperLambdaQueryWrapper,传递参数信息很容易发现:

LambdaQueryWrapper的传参支持User2::getUserName语法!

这么做的好处就是:

当表结构发生改变时,如@TableField(value = "user_name") 更改为 @TableField(value = "name")只要类的成员变量别名不变,就不会影响到程序结果的获取!

到此这篇关于Mybatis Plus 中的LambdaQueryWrapper的文章就介绍到这了,更多相关Mybatis Plus  LambdaQueryWrapper内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mybatis Plus 中的LambdaQueryWrapper示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MyBatis-Plus中自动填充功能的用法示例详解

有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、version、注册时默认的用户角色等,在MP中提供了这样的功能,可以实现自动填充功能,需要的朋友可以参考下
2022-12-10

Mybatis-Plus的示例分析

这篇文章主要介绍了Mybatis-Plus的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Mybatis-Plus1.快速入门地址:安装 | MyBatis-Plus
2023-06-20

【mybatis-plus的LambdaQueryWrapper中and、or的用法 】在 for循环中使用 or

【LambdaQueryWrapper的or用法】 错误写法一: //【 错误写法1: 打印的sql中or拼接没有加括号:SELECT COUNT( * ) FROM pm_project WHERE `del_flag` = 0 AND/
2023-08-18

mybatis-plus在yml中配置详解

本文主要介绍了mybatis-plus在yml中配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-24

java中MyBatis-plus入门使用的示例分析

小编给大家分享一下java中MyBatis-plus入门使用的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、初始化 SpringBoot 项目首先使用
2023-06-15

Mybatis-Plus实现SQL拦截器的示例

这篇文章主要介绍了Mybatis-Plus实现一个SQL拦截器,通过使用SQL拦截器,开发人员可以在执行SQL语句之前或之后对其进行修改或记录,从而更好地控制和优化数据库操作,对Mybatis-Plus SQL拦截器相关知识感兴趣的朋友一起看看吧
2023-05-19

mybatis-plus使用问题的示例分析

这篇文章主要为大家展示了“mybatis-plus使用问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mybatis-plus使用问题的示例分析”这篇文章吧。一、多表联合分页查询1.
2023-06-29

Mybatis Plus逆向工程的示例分析

这篇文章主要介绍Mybatis Plus逆向工程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、创建数据库注:给tbl_emp的表创建外键数据库以及表的建立:二、配置pom.xml 文件
2023-06-26

mybatis-plus查询源码的示例分析

这篇文章主要介绍mybatis-plus查询源码的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!配置详情pom.xmldependency> com.baomidou
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录