国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot學(xué)習(xí)隨筆- 集成MyBatis-Plus(二)條件查詢QueryWrapper、聚合函數(shù)的使用、Lambda條件查詢

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot學(xué)習(xí)隨筆- 集成MyBatis-Plus(二)條件查詢QueryWrapper、聚合函數(shù)的使用、Lambda條件查詢。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

學(xué)習(xí)視頻:【編程不良人】Mybatis-Plus整合SpringBoot實(shí)戰(zhàn)教程,提高的你開發(fā)效率,后端人員必備!

查詢方法詳解

  • 普通查詢

    // 根據(jù)主鍵id去查詢單個(gè)結(jié)果的。
    @Test
    public void selectById() {
        User user = userMapper.selectById(1739970502337392641L);
        System.out.println(user);
    }
    
    //根據(jù)多個(gè)主鍵id批量查詢結(jié)果的
    @Test
    public void selectIds() {
        List<Long> list = Arrays.asList(1739970502337392641L, 1739983903621038082L, 1739984905459900417L);
        List<User> userList = userMapper.selectBatchIds(list);
        userList.forEach(System.out::println);
    }
    // 根據(jù)多個(gè)條件查詢結(jié)果的
    @Test
    public void selectByMap() {
        // map.put("name","小明")
        // map.put("age",30)
        // 相當(dāng)于 where name ="小明" and age=30
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("name", "小剛");
        columnMap.put("age", "18");
        List<User> userList = userMapper.selectByMap(columnMap);
        userList.forEach(System.out::println);
    }
    
  • 條件構(gòu)造器查詢 【重要】

    AbstractWrapper?是 MyBatis Plus 中的一個(gè)抽象類,用于構(gòu)建 SQL 查詢條件。定義了泛型?TC?和?Children。其中,T?表示實(shí)體類的類型,C?表示查詢條件的類型,Children?表示子類的類型,用于支持鏈?zhǔn)秸{(diào)用。它提供了一系列方法,用于構(gòu)建 SQL 查詢條件,包括設(shè)置查詢字段、設(shè)置查詢條件、排序等。

    常用實(shí)現(xiàn)類包括?QueryWrapper?和?UpdateWrapper。這兩個(gè)類都是 MyBatis Plus 提供的具體實(shí)現(xiàn),用于構(gòu)建查詢條件和更新條件。

  • 條件構(gòu)造器查詢示例

    @SpringBootTest
    public class SelectTests {
        @Autowired
        private UserMapper userMapper;
    
        /**
         * 1.名字中包含劉且年齡大于20
         * name like '%劉%' and age>20
         */
        @Test
        public void selectByWrapper() {
            // 創(chuàng)建queryWrapper的兩種方式
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //        QueryWrapper<User> queryWrapper1 = Wrappers.<User>query();
            queryWrapper.like("name", "劉").gt("age", 20);
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
    
        /**
         * 2.名字中包含劉且年齡大于等于20且小于30并且email不為空
         * name like ‘%劉’ and age between 20 and 30 and email is not null
         */
        @Test
        public void selectByWrapper2() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.like("name", "劉").between("age", 20, 30).isNull("email");
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
    
        /**
         * 3.名字中包含劉或年齡大于等于20,按照年齡降序排序,年齡相同按照id升序排列
         * name like ‘%劉’ and age between 20 and 30 and email is not null
         */
        @Test
        public void selectByWrapper3() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.like("name", "劉").or().ge("age",20)
                    .orderByDesc("age")
                    .orderByAsc("user_id");
    
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
        /**
         * 4.創(chuàng)建日期為2023年12月17日并且直屬上級(jí)為王姓
         * date_format(create_time,'%Y-%m-$d') and manager_id in(select id from user where name like '王%'
         */
        @Test
        public void selectByWrapper4() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}", "2023-12-27") //  使用占位符避免sql注入的風(fēng)險(xiǎn)
                    .inSql("manager_id","select user_id from mp_user where name like '王%'");
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
        /**
         * 5.名字為劉姓且年齡小于30或者郵箱不為空
         * name like '王%' and (age<20 or email is not null)
         */
        @Test
        public void selectByWrapper5() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.likeRight("name", "劉")
                    .and(wq -> wq.lt("age", 30).or().isNotNull("email"));
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
        /**
         * 6.名字為劉姓或者(年齡小于30且大于20并且郵箱不為空)
         * name like '劉%' or (age<30 and age>20 and email is not null)
         */
        @Test
        public void selectByWrapper6() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.likeRight("name", "劉")
                    .or(wq -> wq.lt("age", 30).gt("age", 20)
                            .isNotNull("email"));
    
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
        /**
         * 7.(年齡小于30且郵箱不為空)并且名字為劉姓
         *  (age<30 or email is not null) and name like '劉%'
         */
        @Test
        public void selectByWrapper7() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.nested(wq -> wq.lt("age", 30)
                            .or().isNotNull("email"))
                    .likeRight("name", "劉");
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
        /**
         * 8. 年齡為 21 25 33
         *  age in(21,25,33)
         */
        @Test
        public void selectByWrapper8() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.in("age", 21, 25, 33);
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
        /**
         * 9. 只返回滿足條件的其中一條語(yǔ)句即可
         *  limit 1
         */
        @Test
        public void selectByWrapper9() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.in("age", 21, 25, 33).last("limit 1"); // last() 有sql注入的風(fēng)險(xiǎn),謹(jǐn)慎使用
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
    }
    
  • select 不列出全部字段

     /**
       * 10.名字中包含劉且年齡小于30(需求1加強(qiáng)版)
       */
      @Test
      public void selectByWrapper() {
          QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //        queryWrapper.select("user_id","name","age").like("name", "劉").lt("age", 30); // 包含字段
          queryWrapper.like("name", "劉").lt("age", 30)
                  .select(User.class, info ->
                          !info.getColumn().equals("create_time") && !info.getColumn().equals("manager_id"));// 排除字段
          List<User> list = userMapper.selectList(queryWrapper);
          list.forEach(System.out::println);
      }
    
  • condition作用

    根據(jù)判斷決定查詢條件是否加到sql語(yǔ)句里面

    @Test
        public void testCondition() {
            String name = "東";
            String email = "";
            condition(name, email);
        }
        private void condition(String name, String email) {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //        if (StringUtils.isNotEmpty(name)) {
    //            queryWrapper.like("name", name);
    //        }
    //        if (StringUtils.isNotEmpty(email)) {
    //            queryWrapper.like("email", email);
    //        }
            queryWrapper.like(StringUtils.isNotEmpty(name), "name", name)
                    .like(StringUtils.isNotEmpty(email), "email", email);
            List<User> list = userMapper.selectList(queryWrapper);
            list.forEach(System.out::println);
        }
    
  • 實(shí)體作為條件構(gòu)造器構(gòu)造方法的參數(shù)

    @Test
    public void selectByWrapperEntity() {
        User user = new User();
        user.setRealName("小剛");
        user.setAge(18);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
        List<User> list = userMapper.selectList(queryWrapper);
        list.forEach(System.out::println);
    }
    運(yùn)行結(jié)果的sql語(yǔ)句:SELECT * FROM mp_user WHERE **name=? AND age=?**
    會(huì)把set注入的屬性和值映射到where條件中
    
    • 通過SqlCondition 更改查詢條件

      Spring Boot學(xué)習(xí)隨筆- 集成MyBatis-Plus(二)條件查詢QueryWrapper、聚合函數(shù)的使用、Lambda條件查詢

      用法
      @TableField(condition = SqlCondition.LIKE)
      private String name;
      @TableField(condition = "%s&lt;#{%s}") //根據(jù)定義的常量,自己也可以參考并更改
      private Integer age;
      運(yùn)行結(jié)果:SELECT * FROM mp_user WHERE **name LIKE CONCAT('%',?,'%')** AND AND age<?
      
  • allEq

    allEq是一個(gè)查詢條件配置方法,用于構(gòu)建查詢條件。它可以根據(jù)傳入的條件參數(shù),生成一個(gè)包含所有等值條件的查詢條件對(duì)象。

    @Test
    public void selectByWrapperAllEq() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        Map<String, Object> params = new HashMap<>();
        params.put("name", "小明");
        params.put("age", null);
        **queryWrapper.allEq(params,false)**; // false代表忽略值為null的字段,即不參與where條件
        List<User> list = userMapper.selectList(queryWrapper);
        list.forEach(System.out::println);
    }
    
  • 其他條件構(gòu)造器

    **selectMaps 返回**

    @Test
        public void selectByWrapperMaps() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.select("user_id","name").like("name", "劉").lt("age", 30);
    //        List<User> list = userMapper.selectList(queryWrapper);// 返回值為實(shí)體類的話,沒設(shè)置的值還是會(huì)返回,只不過值為null
            List<Map<String, Object>> userList = userMapper.selectMaps(queryWrapper);// 只返回限定的字段
            userList.forEach(System.out::println);
        }
    
        /** 示例
         * 11.按照直屬上級(jí)分組,查詢每組的平均年齡、最大年齡、最小年齡,并且至取年齡總和為500的組
         * select avg(age)avg_age,min(age) min_age,max(age) max_age from user group by manager_id having sum(age)<500
         */
        @Test
        public void selectByWrapperMaps2() {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.select("avg(age) avg_age", "min(age) min_age", "max(age) max_age")
                    .groupBy("manager_id").having("sum(age)<{0}", 500);
            List<Map<String, Object>> userList = userMapper.selectMaps(queryWrapper);
            userList.forEach(System.out::println);
        }
    
  • lambda條件構(gòu)造器

    @Test
    public void selectLambda() {
        //創(chuàng)建lambda條件構(gòu)造器的三種方式
        LambdaQueryWrapper<User> lambda = new LambdaQueryWrapper<>();
        LambdaQueryWrapper<User> lambda2 = new QueryWrapper<User>().lambda();
        LambdaQueryWrapper<User> lambda3= Wrappers.<User>lambdaQuery();
    
        lambda3.like(User::getName, "劉")
                .lt(User::getAge, 30); // where name like '%雨%' and age<30
        List<User> userList = userMapper.selectList(lambda3);
        userList.forEach(System.out::println);
    }
    /**
     * 5.名字為劉姓且(年齡小于30或郵箱不為空)
     * name like '劉%' and (age<30 or email is not null)
     */
    @Test
    public void selectLambda2() {
        LambdaQueryWrapper<User> lambda= Wrappers.<User>lambdaQuery();
        lambda.like(User::getName, "劉")
                .and(wq -> wq.lt(User::getAge, 20)
                        .or().isNotNull(User::getEmail));
        List<User> userList = userMapper.selectList(lambda);
        userList.forEach(System.out::println);
    }
    // 鏈?zhǔn)秸{(diào)用多個(gè)條件 LambdaQueryChainWrapper
    @Test
    public void selectLambda3() {
        List<User> userList = new LambdaQueryChainWrapper<>(userMapper)
                .like(User::getName, "劉").ge(User::getAge, 20).list();
        userList.forEach(System.out::println);
    }
    

下一章:Spring Boot學(xué)習(xí)隨筆- 集成MyBatis-Plus(三)自定義SQL、分頁(yè)實(shí)現(xiàn)(PaginationInterceptor )、更新和刪除詳細(xì)方法文章來源地址http://www.zghlxwxcb.cn/news/detail-765081.html

到了這里,關(guān)于Spring Boot學(xué)習(xí)隨筆- 集成MyBatis-Plus(二)條件查詢QueryWrapper、聚合函數(shù)的使用、Lambda條件查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 從零開始學(xué)Spring Boot系列-集成MyBatis-Plus

    從零開始學(xué)Spring Boot系列-集成MyBatis-Plus

    在Spring Boot應(yīng)用開發(fā)中,MyBatis-Plus是一個(gè)強(qiáng)大且易于使用的MyBatis增強(qiáng)工具,它提供了很多實(shí)用的功能,如代碼生成器、條件構(gòu)造器、分頁(yè)插件等,極大地簡(jiǎn)化了MyBatis的使用和配置。本篇文章將指導(dǎo)大家如何在Spring Boot項(xiàng)目中集成MyBatis-Plus。 首先,確保你已經(jīng)安裝了Java開發(fā)環(huán)

    2024年04月08日
    瀏覽(75)
  • spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增數(shù)據(jù)(圖文講解)

    spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增數(shù)據(jù)(圖文講解)

    ?更新時(shí)間 2023-01-10 16:02:58 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 實(shí)現(xiàn) MySQL 批量插入數(shù)據(jù)。 先拋出一個(gè)問題:假設(shè)老板給你下了個(gè)任務(wù),向數(shù)據(jù)庫(kù)中添加 100 萬條數(shù)據(jù),并且不能耗時(shí)太久! 通常來說,我們向 MySQL 中新增一條記錄,SQL 語(yǔ)句類似如下:

    2024年02月04日
    瀏覽(28)
  • spring boot集成mybatis-plus——Mybatis Plus 新增數(shù)據(jù)并返回主鍵 ID(圖文講解)

    spring boot集成mybatis-plus——Mybatis Plus 新增數(shù)據(jù)并返回主鍵 ID(圖文講解)

    ?更新時(shí)間 2023-01-10 15:37:37 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 框架給數(shù)據(jù)庫(kù)表新增數(shù)據(jù),主要內(nèi)容思維導(dǎo)圖如下: Mybatis Plus 新增數(shù)據(jù)思維導(dǎo)圖 為了演示新增數(shù)據(jù),在前面小節(jié)中,我們已經(jīng)定義好了一個(gè)用于測(cè)試的用戶表, 執(zhí)行腳本如下: 定義一

    2024年02月02日
    瀏覽(40)
  • spring boot集成mybatis-plus——Mybatis Plus 多表聯(lián)查(包含分頁(yè)關(guān)聯(lián)查詢,圖文講解)...

    spring boot集成mybatis-plus——Mybatis Plus 多表聯(lián)查(包含分頁(yè)關(guān)聯(lián)查詢,圖文講解)...

    ?更新時(shí)間 2023-01-03 21:41:38 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 實(shí)現(xiàn) 多表關(guān)聯(lián)查詢 ,以及 分頁(yè)關(guān)聯(lián)查詢 。 本文以 查詢用戶所下訂單 ,來演示 Mybatis Plus 的關(guān)聯(lián)查詢,數(shù)據(jù)庫(kù)表除了前面小節(jié)中已經(jīng)定義好的用戶表外,再額外創(chuàng)建一張訂單表,然后

    2024年02月01日
    瀏覽(25)
  • Spring Boot學(xué)習(xí)隨筆- 集成JSP模板(配置視圖解析器)、整合Mybatis(@MapperScan注解的使用)

    Spring Boot學(xué)習(xí)隨筆- 集成JSP模板(配置視圖解析器)、整合Mybatis(@MapperScan注解的使用)

    學(xué)習(xí)視頻:【編程不良人】2021年SpringBoot最新最全教程 在main創(chuàng)建webapp,然后創(chuàng)建index.jsp進(jìn)行測(cè)試,在訪問之前需要進(jìn)行一個(gè)設(shè)置,否則springboot是找不到j(luò)sp頁(yè)面的 修改jsp無需重啟應(yīng)用 數(shù)據(jù)庫(kù)訪問框架:hibernate、jpa、mybatis【主流】 SpringBoot(微框架) = Spring(工廠) + SpringMV

    2024年02月05日
    瀏覽(58)
  • Spring Boot整合MyBatis-Plus

    Spring Boot整合MyBatis-Plus

    引言 在現(xiàn)代軟件開發(fā)中,我們經(jīng)常需要處理大量的數(shù)據(jù)。為了有效地管理這些數(shù)據(jù),我們需要使用一些強(qiáng)大的框架。其中,Spring Boot和MyBatis-Plus是兩個(gè)非常流行的框架。Spring Boot是一個(gè)基于Spring的開源Java框架,可以用于創(chuàng)建獨(dú)立的、生產(chǎn)級(jí)別的Spring應(yīng)用。MyBatis-Plus是一個(gè)MyB

    2024年01月19日
    瀏覽(32)
  • Spring Boot 整合MyBatis-Plus

    Spring Boot 整合MyBatis-Plus

    ??前言 本篇博文是關(guān)于Spring Boot 整合MyBatis-Plus的,希望你能夠喜歡?? ??個(gè)人主頁(yè):晨犀主頁(yè) ??個(gè)人簡(jiǎn)介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動(dòng)力???? ??歡迎大家:這里是CSDN,我總結(jié)知識(shí)的地方,歡迎來到我的博客,感謝大家的觀看??

    2024年02月11日
    瀏覽(32)
  • spring boot mybatis-plus操作實(shí)踐

    1、先建一個(gè)數(shù)據(jù)表實(shí)體類 2、service目錄下新建接口IDeptService,然后擴(kuò)展mp的IService 3、service目錄的impl目錄下新建類 DeptServiceImpl,擴(kuò)展mp的ServiceImpl,實(shí)現(xiàn)接口IDeptService,然后注冊(cè)@Service 注解 4、DeptMapper 接口需要擴(kuò)展mp的BaseMapper接口 5、調(diào)試一下看看是否可以使用

    2024年02月01日
    瀏覽(24)
  • spring boot3整合mybatis-plus

    spring boot3整合mybatis-plus

    添加依賴 配置屬性信息 編寫業(yè)務(wù)邏輯測(cè)試代碼 配置mybatis-plus分頁(yè)插件 配置mybatis-plus之屬性自動(dòng)填充 如圖所示 1、添加依賴 2、配置屬性 3、編寫測(cè)試代碼 4、XML文件 5、測(cè)試數(shù)據(jù)是否能走通

    2024年03月12日
    瀏覽(24)
  • spring boot+mybatis-plus配置讀寫分離

    對(duì)于mysql主從機(jī)制的讀寫分離,對(duì)于寫操作寫入主庫(kù),讀取操作讀取從庫(kù) 一、安裝依賴 二、配置文件配置數(shù)據(jù)源 三、在service,如果是讀取操作的話,則需要加上注解@DS(“slave”)即可,可看如下示例

    2024年01月25日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包