Mybatis Plus 中的LambdaQueryWrapper示例详解

 更新时间:2022年03月17日 09:45:54   作者:专注写bug  
这篇文章主要介绍了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Spring Boot的GenericApplicationContext使用教程

    详解Spring Boot的GenericApplicationContext使用教程

    这篇教程展示了如何在Spring应用程序中使用GenericApplicationContext 。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Java创建ZIP压缩文件的方法

    Java创建ZIP压缩文件的方法

    这篇文章主要介绍了Java创建ZIP压缩文件的方法,实例分析了java创建zip文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java NIO.2 使用Path接口来监听文件、文件夹变化

    Java NIO.2 使用Path接口来监听文件、文件夹变化

    Java7对NIO进行了大的改进,新增了许多功能,接下来通过本文给大家介绍Java NIO.2 使用Path接口来监听文件、文件夹变化 ,需要的朋友可以参考下
    2019-05-05
  • Hibernate5新特性介绍

    Hibernate5新特性介绍

    hibernate5中有了一些新的变动,下面脚本之家小编把Hibernate5新特性相关知识,分享到脚本之家平台,感兴趣的朋友参考下吧
    2017-09-09
  • 基于JPA查询部分字段的相关事项

    基于JPA查询部分字段的相关事项

    这篇文章主要介绍了JPA查询部分字段的相关事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Windows系统下JDK1.8与JDK11版本切换超详细教程

    Windows系统下JDK1.8与JDK11版本切换超详细教程

    这篇文章主要给大家介绍了关于Windows系统下JDK1.8与JDK11版本切换的超详细教程,我们可以有多个工程项目,用的JDK版本不一样,这个时候就需要进行自由切换JDK版本了,需要的朋友可以参考下
    2023-07-07
  • Java实现文件分片上传接口的示例代码

    Java实现文件分片上传接口的示例代码

    这篇文章主要为大家详细介绍了如何利用Java语言实现文件分片上传的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-07-07
  • Java常用工具类—集合排序

    Java常用工具类—集合排序

    这篇文章主要介绍了Java集合排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 解决SpringBoot整合ElasticSearch遇到的连接问题

    解决SpringBoot整合ElasticSearch遇到的连接问题

    这篇文章主要介绍了解决SpringBoot整合ElasticSearch遇到的连接问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 基于Spring Mvc实现的Excel文件上传下载示例

    基于Spring Mvc实现的Excel文件上传下载示例

    本篇文章主要介绍了基于Spring Mvc实现的Excel文件上传下载示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论