亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis-Plus中最簡(jiǎn)單的查詢操作教程(Lambda)

 更新時(shí)間:2022年03月08日 11:05:24   作者:馮文議  
這篇文章主要給大家介紹了關(guān)于MyBatis-Plus中最簡(jiǎn)單的查詢操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

引言

MyBatis-Plus | 最優(yōu)雅最簡(jiǎn)潔地完成數(shù)據(jù)庫(kù)操作

是對(duì)MyBatis-Plus的功能進(jìn)行簡(jiǎn)單介紹,雖然是介紹,也讓我們領(lǐng)略到他的優(yōu)雅與強(qiáng)大。你是不是已經(jīng)被吸引了?別著急,上一節(jié),我們算是參觀了MyBatis的風(fēng)景,這一節(jié),我將帶你領(lǐng)略他獨(dú)特的魅力。

Lambda

官方表示,3.x支持Lambda表達(dá)式,那應(yīng)該怎么使用呢?我們來看個(gè)例子:

QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(Student::getName, "馮文議");
List<Student> studentList = list(queryWrapper);
for (Student student : studentList)
    Console.info(student);

看一下測(cè)試結(jié)果(為了看好,我們轉(zhuǎn)成json):

{
    "id":1035789714459471874,
    "name":"馮文議",
    "age":26,
    "info":"無畏造英雄",
    "isDelete":false,
    "createTime":"Sep 1, 2018 3:21:26 PM",
    "updateTime":"Sep 1, 2018 3:21:26 PM",
    "gender":"MALE",
    "idcardId":1035789714388168706,
    "cityId":1035762001753501698
}

如果你使用了我的配置,你也能看到相應(yīng)的SQL

==>  Preparing: SELECT id,name,age,info,is_delete,create_time,update_time,gender,idcard_id,city_id FROM t_student WHERE name = ? 
==> Parameters: 馮文議(String)
<==    Columns: id, name, age, info, is_delete, create_time, update_time, gender, idcard_id, city_id
<==        Row: 1035789714459471874, 馮文議, 26, <<BLOB>>, 0, 2018-09-01 15:21:26.0, 2018-09-01 15:21:26.0, 1, 1035789714388168706, 1035762001753501698
<==      Total: 1

分頁(yè)查詢

感覺哈,分頁(yè)查詢是他們框架的起因,那我們先說分頁(yè)查詢。直接看代碼:

第一步:在 Application 中配置

/**
 * 分頁(yè)插件
 */
@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

第二步:寫分頁(yè)代碼(為了你能夠看得清楚,我截圖給你):

分頁(yè)代碼

看結(jié)果(json):

{
    "records":[
        {
            "id":1035788325322752001,
            "name":"1",
            "age":1,
            "info":"1",
            "isDelete":false,
            "createTime":"Sep 1, 2018 3:15:55 PM",
            "updateTime":"Sep 1, 2018 3:15:55 PM",
            "gender":"MALE",
            "idcardId":1035788325276614657,
            "cityId":1035788325201117185
        },
        {
            "id":1035789714459471874,
            "name":"馮文議",
            "age":26,
            "info":"無畏造英雄",
            "isDelete":false,
            "createTime":"Sep 1, 2018 3:21:26 PM",
            "updateTime":"Sep 1, 2018 3:21:26 PM",
            "gender":"MALE",
            "idcardId":1035789714388168706,
            "cityId":1035762001753501698
        }
    ],
    "total":2,
    "size":2,
    "current":1,
    "optimizeCountSql":true
}

不要問我前端應(yīng)該怎么寫,表示我也不會(huì)寫。

條件查詢

終于要進(jìn)入這里了,是不是很激動(dòng)啊。別急,客官,抽根煙先,我們慢慢來。

【1】多eq

QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
        .eq(Student::getName, "馮文議")
        .eq(Student::getAge, 26);
List<Student> studentList = list(queryWrapper);
for (Student student : studentList)
    Console.info(new Gson().toJson(student));

對(duì)于這部分的測(cè)試,我想結(jié)果是毫無因?yàn)?,那么你?yīng)該關(guān)注什么呢?沒錯(cuò),SQL,所以,我們直接看SQL。當(dāng)然,結(jié)果也是可以看到的。

==>  Preparing: SELECT id,name,age,info,is_delete,create_time,update_time,gender,idcard_id,city_id FROM t_student WHERE name = ? AND age = ? 
==> Parameters: 馮文議(String), 26(Integer)
<==    Columns: id, name, age, info, is_delete, create_time, update_time, gender, idcard_id, city_id
<==        Row: 1035789714459471874, 馮文議, 26, <<BLOB>>, 0, 2018-09-01 15:21:26.0, 2018-09-01 15:21:26.0, 1, 1035789714388168706, 1035762001753501698
<==      Total: 1

我們還可以這樣寫:

QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
        .and(obj ->
                obj.eq(Student::getName, "馮文議")
                    .eq(Student::getAge, 26));

List<Student> studentList = list(queryWrapper);
for (Student student : studentList)
    Console.info(new Gson().toJson(student));

【2】or

第一種:

QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
        .or(obj1 -> obj1.eq(Student::getName, "馮文議"))
        .or(obj2 -> obj2.eq(Student::getName, "1"));
List<Student> studentList = list(queryWrapper);
for (Student student : studentList)
    Console.info(new Gson().toJson(student));

sql:

SELECT * FROM t_student WHERE ( name = ? ) OR ( name = ? ) 

第二種:

QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
        .eq(Student::getName, "馮文議")
        .or()
        .eq(Student::getName, "1");
List<Student> studentList = list(queryWrapper);
for (Student student : studentList)
    Console.info(new Gson().toJson(student));

SQL:

SELECT * FROM t_student WHERE name = ? OR name = ? 

這樣的話,我們就可以拼接各種條件了。那么問題來了:到底有哪些關(guān)鍵字呢?性能如何呢?

條件構(gòu)造器

條件參數(shù)說明

查詢方式說明
setSqlSelect設(shè)置 SELECT 查詢字段
whereWHERE 語句,拼接 + WHERE 條件
andAND 語句,拼接 + AND 字段=值
andNewAND 語句,拼接 + AND (字段=值)
orOR 語句,拼接 + OR 字段=值
orNewOR 語句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 內(nèi)容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查詢 LIKE
notLike模糊查詢 NOT LIKE
inIN 查詢
notInNOT IN 查詢
isNullNULL 值查詢
isNotNullIS NOT NULL
groupBy分組 GROUP BY
havingHAVING 關(guān)鍵詞
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 條件語句
notExistsNOT EXISTS 條件語句
betweenBETWEEN 條件語句
notBetweenNOT BETWEEN 條件語句
addFilter自由拼接 SQL
last拼接在最后,例如:last(“LIMIT 1”)

注意! xxNew 都是另起 ( ... ) 括號(hào)包裹。

自定義sql

如果官方提供的滿足不了你的需求,或者你的需求很復(fù)雜,導(dǎo)致你不知道如何使用條件構(gòu)造器,那應(yīng)該怎么辦呢?

很簡(jiǎn)單。

第一步:找到 Dao,寫一個(gè)數(shù)據(jù)庫(kù)操作接口

public interface StudentDao extends BaseMapper<Student> {
    
    List<Student> selectAll();
    
}

第二步:在xml文件中寫sql

<!--List<Student> selectAll();-->
<select id="selectAll" resultMap="BaseResultMap">
    select * from t_student
</select>

這樣我們就可以使用了:

@Resource
StudentDao studentDao;

List<Student> studentList = studentDao.selectAll();
for (Student student : studentList)
    Console.info(new Gson().toJson(student));

測(cè)試:

自定義sql測(cè)試

封裝我們自己的Service

前面我們就說了,我是很不喜歡MP的查詢接口的,我們就把他弄成我們喜歡的吧,我這里借鑒 JPA接口了,哈哈

interface:

/**
 * 查詢所有數(shù)據(jù)
 * @return List<Student>
 */
List<Student> findAll();

/**
 * 查詢部分?jǐn)?shù)據(jù)
 * @return List<Student>
 */
List<Student> findList();

/**
 * 查詢一條數(shù)據(jù)
 * @return Student
 */
Student findOne();

/**
 * 根據(jù)主鍵ID查詢數(shù)據(jù)
 * @param id 主鍵ID,為null,返回null
 * @return Student
 */
Student findById(Long id);

impl:

@Override
public List<Student> findAll() {
    return list(null);
}

@Override
public List<Student> findList() {
    return list(null);
}

@Override
public Student findOne() {
    return getOne(null);
}

@Override
public Student findById(Long id) {
    ExceptionUtil.notNull(id, "id must not null.");
    return getById(id);
}

我們來試一下:

封裝service接口

哇?。?!

是不是很爽!??!

資料

[1] MyBatis-Plus測(cè)試示例

[2] 官網(wǎng)測(cè)試?yán)樱?a target="_blank">WrapperTest.java

總結(jié)

到此這篇關(guān)于MyBatis-Plus中最簡(jiǎn)單的查詢操作的文章就介紹到這了,更多相關(guān)MyBatis-Plus查詢操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot動(dòng)態(tài)加載Echarts柱狀圖

    springboot動(dòng)態(tài)加載Echarts柱狀圖

    這篇文章主要為大家詳細(xì)介紹了springboot動(dòng)態(tài)加載Echarts柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)單鏈表示例(java單鏈表)

    java實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)單鏈表示例(java單鏈表)

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)單鏈表示例,需要的朋友可以參考下
    2014-03-03
  • springboot實(shí)現(xiàn)全局異常處理及自定義異常類

    springboot實(shí)現(xiàn)全局異常處理及自定義異常類

    這篇文章主要介紹了springboot實(shí)現(xiàn)全局異常處理及自定義異常類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 關(guān)于idea2022.2?閃退的問題

    關(guān)于idea2022.2?閃退的問題

    最近更新了idea2022.2版本,這是一個(gè)比較大的軟件版本更迭,下面小編給大家介紹下idea2022.2?閃退的問題及解決方法,需要的朋友可以參考下
    2022-08-08
  • springboot項(xiàng)目讀取resources目錄下的文件的9種方式

    springboot項(xiàng)目讀取resources目錄下的文件的9種方式

    本文主要介紹了springboot項(xiàng)目讀取resources目錄下的文件的9種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 深入理解LinkedHashSet集合的底層機(jī)制

    深入理解LinkedHashSet集合的底層機(jī)制

    這篇文章主要介紹了LinkedHashSet的底層機(jī)制詳解,LinkedHashSet根據(jù)元素的hashCode值來決定元素的存儲(chǔ)位置,同時(shí)使用鏈表維護(hù)元素的次序,?這使得元素看起來是以插入順序保存的,需要的朋友可以參考下
    2023-10-10
  • 在controller中如何設(shè)置接收參數(shù)的默認(rèn)值

    在controller中如何設(shè)置接收參數(shù)的默認(rèn)值

    這篇文章主要介紹了在controller中如何設(shè)置接收參數(shù)的默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java中Locks的使用詳解

    java中Locks的使用詳解

    這篇文章主要介紹了java中Locks的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java數(shù)組常見應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】

    Java數(shù)組常見應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】

    這篇文章主要介紹了Java數(shù)組常見應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了java數(shù)組的基本定義、創(chuàng)建、遍歷、排序、查找等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Java自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏

    Java自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏

    在實(shí)際開發(fā)中經(jīng)常會(huì)遇到有一些信息不能全部展示用戶,需要隱藏(可以叫脫敏),所以本文為大家分享了利用自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏的示例代碼,需要的可以參考下
    2023-07-07

最新評(píng)論