最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

是對(duì)MyBatis-Plus的功能進(jì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);

看一下測試結(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

分頁查詢

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

第一步:在 Application 中配置

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

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

分頁代碼

看結(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ì)于這部分的測試,我想結(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)該怎么辦呢?

很簡單。

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

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));

測試:

自定義sql測試

封裝我們自己的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接口

哇?。。?/p>

是不是很爽?。。?/p>

資料

[1] MyBatis-Plus測試示例

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

總結(jié)

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

相關(guān)文章

  • Java中Class類的作用與深入理解

    Java中Class類的作用與深入理解

    這篇文章主要介紹了Java中Class類的作用與深入理解的相關(guān)資料,希望通過本文能幫助到大家讓大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • SpringBoot集成Validation參數(shù)校驗(yàn)

    SpringBoot集成Validation參數(shù)校驗(yàn)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot集成Validation參數(shù)校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • ActiveMQ安裝及部署教程圖解

    ActiveMQ安裝及部署教程圖解

    這篇文章主要介紹了ActiveMQ安裝及部署教程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 簡單總結(jié)Java IO中stream流的使用方法

    簡單總結(jié)Java IO中stream流的使用方法

    這篇文章主要介紹了Java IO中stream流的使用方法的簡單總結(jié),包括數(shù)據(jù)流和打印流等Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-03-03
  • 在SpringBoot中實(shí)現(xiàn)一個(gè)訂單號(hào)生成系統(tǒng)的示例代碼

    在SpringBoot中實(shí)現(xiàn)一個(gè)訂單號(hào)生成系統(tǒng)的示例代碼

    在Spring Boot中設(shè)計(jì)一個(gè)訂單號(hào)生成系統(tǒng),主要考慮到生成的訂單號(hào)需要滿足的幾個(gè)要求:唯一性、可擴(kuò)展性、以及可能的業(yè)務(wù)相關(guān)性,本文給大家介紹了幾種常見的解決方案及相應(yīng)的示例代碼,需要的朋友可以參考下
    2024-02-02
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個(gè)性修改SpringBoot項(xiàng)目的啟動(dòng)banner的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 深入解析Java的Hibernate框架中的一對(duì)一關(guān)聯(lián)映射

    深入解析Java的Hibernate框架中的一對(duì)一關(guān)聯(lián)映射

    這篇文章主要介紹了Java的Hibernate框架的一對(duì)一關(guān)聯(lián)映射,包括對(duì)一對(duì)一外聯(lián)映射的講解,需要的朋友可以參考下
    2016-01-01
  • Java中自增和自減操作符(++/--)的那些事

    Java中自增和自減操作符(++/--)的那些事

    這篇文章主要給大家介紹了關(guān)于Java中自增和自減操作符(++/--)的那些事,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Java中隨機(jī)函數(shù)變換的示例詳解

    Java中隨機(jī)函數(shù)變換的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java中隨機(jī)函數(shù)的變換,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,感興趣的可以了解一下
    2022-08-08
  • java異常處理throws完成異常拋出詳解

    java異常處理throws完成異常拋出詳解

    這篇文章主要介紹了java異常處理中throws完成異常拋出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家學(xué)有所得多多進(jìn)步
    2021-10-10

最新評(píng)論

潮安县| 化隆| 温泉县| 沾化县| 光山县| 广昌县| 澜沧| 新密市| 清河县| 贡嘎县| 邹城市| 长兴县| 广宗县| 鸡泽县| 怀宁县| 仪陇县| 长白| 长兴县| 余江县| 宁明县| 泉州市| 八宿县| 阿勒泰市| 霍邱县| 遂溪县| 剑阁县| 贞丰县| 新竹县| 襄垣县| 嘉定区| 彭泽县| 武冈市| 高唐县| 定远县| 尉犁县| 曲水县| 巴塘县| 长葛市| 淮北市| 门源| 建阳市|