Mybatis?Plus?中的LambdaQueryWrapper示例詳解
前言
之前寫過 Mybatis Plus
的基本配置和使用。
當(dāng)初在進(jìn)行查詢時(shí),雖然沒有寫硬SQL進(jìn)行查詢數(shù)據(jù)庫操作,但是也不是太友好!
QueryWrapper
為什么說不夠友好,客官大姥爺們先看一個(gè)例子,假設(shè)數(shù)據(jù)庫中,存在一個(gè)user表
,表結(jié)構(gòu)呢相對(duì)簡單,如下所示:
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查詢時(shí),只需要編寫pojo類,關(guān)聯(lián)映射,如下所示:
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; }
再編寫一個(gè)持久層的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> { }
就能進(jìn)行查詢操作,如下所示:
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); } }
雖然很方便,但是這里需要注意一個(gè)問題:
QueryWrapper
中的eq
、in
等操作,第一個(gè)參數(shù)往往是列名
!
【問題:】
這里就引申出一個(gè)問題:
如果實(shí)際開發(fā)中表結(jié)構(gòu)經(jīng)常改變,豈不是涉及到變動(dòng)的列名相關(guān)代碼都需要改?。。?!
針對(duì)上面問題的出現(xiàn),可以考慮使用LambdaQueryWrapper
解決!
LambdaQueryWrapper
那么現(xiàn)在就變更表
的列名。
新建一個(gè)類似的表。
表結(jié)構(gòu)如下所示:
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類,實(shí)現(xiàn)映射對(duì)應(yīng)關(guān)系:
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; }
編寫一個(gè)持久層的接口:
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); }
測試運(yùn)行:
總結(jié)
從上面的QueryWrapper
和LambdaQueryWrapper
,傳遞參數(shù)信息很容易發(fā)現(xiàn):
LambdaQueryWrapper
的傳參支持User2::getUserName
語法!
這么做的好處就是:
當(dāng)表結(jié)構(gòu)發(fā)生改變時(shí),如
@TableField(value = "user_name")
更改為@TableField(value = "name")
只要類的成員變量別名不變,就不會(huì)影響到程序結(jié)果的獲??!
到此這篇關(guān)于Mybatis Plus 中的LambdaQueryWrapper的文章就介紹到這了,更多相關(guān)Mybatis Plus LambdaQueryWrapper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Spring Boot的GenericApplicationContext使用教程
這篇教程展示了如何在Spring應(yīng)用程序中使用GenericApplicationContext 。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化
Java7對(duì)NIO進(jìn)行了大的改進(jìn),新增了許多功能,接下來通過本文給大家介紹Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化 ,需要的朋友可以參考下2019-05-05Windows系統(tǒng)下JDK1.8與JDK11版本切換超詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下JDK1.8與JDK11版本切換的超詳細(xì)教程,我們可以有多個(gè)工程項(xiàng)目,用的JDK版本不一樣,這個(gè)時(shí)候就需要進(jìn)行自由切換JDK版本了,需要的朋友可以參考下2023-07-07Java實(shí)現(xiàn)文件分片上傳接口的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)文件分片上傳的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-07-07解決SpringBoot整合ElasticSearch遇到的連接問題
這篇文章主要介紹了解決SpringBoot整合ElasticSearch遇到的連接問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例
本篇文章主要介紹了基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02