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

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

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

引言

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

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

Lambda

官方表示,3.x支持Lambda表達式,那應該怎么使用呢?我們來看個例子:

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

看一下測試結果(為了看好,我們轉成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
}

如果你使用了我的配置,你也能看到相應的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();
}

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

分頁代碼

看結果(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
}

不要問我前端應該怎么寫,表示我也不會寫。

條件查詢

終于要進入這里了,是不是很激動啊。別急,客官,抽根煙先,我們慢慢來。

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

對于這部分的測試,我想結果是毫無因為,那么你應該關注什么呢?沒錯,SQL,所以,我們直接看SQL。當然,結果也是可以看到的。

==>  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 = ? 

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

條件構造器

條件參數(shù)說明

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

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

自定義sql

如果官方提供的滿足不了你的需求,或者你的需求很復雜,導致你不知道如何使用條件構造器,那應該怎么辦呢?

很簡單。

第一步:找到 Dao,寫一個數(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();

/**
 * 查詢部分數(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測試示例

[2] 官網(wǎng)測試例子:WrapperTest.java

總結

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

相關文章

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

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

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

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

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

    ActiveMQ安裝及部署教程圖解

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

    簡單總結Java IO中stream流的使用方法

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

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

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

    SpringBoot詳解Banner的使用

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

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

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

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

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

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

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

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

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

最新評論

太仆寺旗| 莱州市| 西安市| 塔城市| 平远县| 深泽县| 依安县| 临邑县| 沧源| 汕尾市| 石棉县| 清原| 高邑县| 陵水| 浮山县| 固原市| 海盐县| 光泽县| 定远县| 武汉市| 大丰市| 将乐县| 阿鲁科尔沁旗| 潼关县| 株洲县| 临江市| 德令哈市| 夏河县| 东方市| 温州市| 城固县| 宿州市| 深水埗区| 寿宁县| 石嘴山市| 福建省| 双鸭山市| 彰化市| 平阳县| 桂东县| 玛曲县|