• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • mybatis 動態sql和分頁

    標簽: mybatis 動態sql和分頁

    1、mybatis動態sql

    If
    當bname不為空的時候,的到bname的值進行模糊查詢;反之就是查詢全部:
    在這里插入圖片描述
    foreach
    案例:通過自定義的數組【 ?,? ,? ,】來查詢

    BookMapper.java

    List<Book> selectBooksIn(@Param("bookIds") List bookIds);
    

    注釋:@Param的注解了解:鏈接: MyBatis 中 @Param.

    BookMapper.xml

         collection : 代表數組或者集合
         item : 代表循環的值
         index :循環變量
         open : 循環時字符串的最開始的值
         separator : 循環的分隔符
         close  : 循環結束后追加的字符
    
      <!--講解foreach標簽-->
      <select id="selectBooksIn" resultType="com.cbw.model.Book" parameterType="java.util.List">
      select * from t_mvc_book where bid in
      <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
        #{bid}
      </foreach>
      </select>
    

    BookServiceImpl

      public List<Book> selectBooksIn(List bookIds) {
            return bookMapper.selectBooksIn(bookIds);
        }
    

    BookServiceImplTest

     @Test
        public void selectBooksIn() {
            List bookIds= new ArrayList();
            bookIds.add(13);
            bookIds.add(16);
            bookIds.add(18);
            for (Book book : this.bookService.selectBooksIn(bookIds)) {
                System.out.println(book);
            }
        }
    

    效果:
    在這里插入圖片描述

    2、模糊查詢

    有三種查詢方法:#{…} 、${…}、Concat(’%’,#{xxx},’%’)

    BookMapper.xml

    <select id="selectBooksLikel" resultType="com.cbw.model.Book" parameterType="java.lang.String">
        select * from  t_mvc_book
        <where>
          bname like #{bname}
        </where>
      </select>
    
      <select id="selectBooksLike2" resultType="com.cbw.model.Book" parameterType="java.lang.String">
        select * from  t_mvc_book
        <where>
          bname like '${bname}'
        </where>
      </select>
    
      <select id="selectBooksLike3" resultType="com.cbw.model.Book" parameterType="java.lang.String">
        select * from  t_mvc_book
        <where>
          bname like concat('%',#{bname},'%')
        </where>
      </select>
    

    BookMapper.java

        List<Book> selectBooksLikel(@Param("bname") String bname);
        List<Book> selectBooksLike2(@Param("bname") String bname);
        List<Book> selectBooksLike3(@Param("bname") String bname);
    

    BookServiceImplTest.java

     @Test
        public void  selectBooksLike() {
           /* for (Book book : this.bookService.selectBooksLikel("%圣墟%")) {
                System.out.println(book);
            }*/
    
            /*for (Book book : this.bookService.selectBooksLike2("%圣墟%")) {
                System.out.println(book);
            }*/
    
            for (Book book : this.bookService.selectBooksLike3("圣墟")) {
                System.out.println(book);
            }
    
    
        }
    

    效果:
    在這里插入圖片描述
    從控制臺獲取的三種方式的sql 語句的差別
    注意:#{…}自帶引號,${…}有sql注入的風險

    #{...}
    select bid, bname, price from t_mvc_book where bname like "%"?"%" 
    
    $ {...}
    select bid, bname, price from t_mvc_book where bname like "%"'圣墟'"%"
    
    Concat
    select bid, bname, price from t_mvc_book where bname like concat('%',?,'%') 
    
    

    3、查詢返回結果集的處理

    1.resultMap:適合使用返回值是自定義實體類的情況
    2. resultType:適合使用返回值的數據類型是非自定義的,即jdk的提供的類型
    3.
    1 使用resultMap返回自定義類型集合
    BookMapper.java

     /**
         * 使用resultMap
         * @return
         */
        List<Book> list1();
    

    BookMapper.xml

    <resultMap id="BaseResultMap" type="com.cbw.model.Book" >
        <constructor >
          <idArg column="bid" jdbcType="INTEGER" javaType="java.lang.Integer" />
          <arg column="bname" jdbcType="VARCHAR" javaType="java.lang.String" />
          <arg column="price" jdbcType="REAL" javaType="java.lang.Float" />
        </constructor>
      </resultMap>
    
    
    
      <select id="list1" resultMap="BaseResultMap">
        select  * from t_mvc_book
      </select>
    
    
    

    2.使用resultType返回List
    BookMapper.java

     /**
         * 使用resultType
         * @return
         */
        List<Book> list2();
    

    BookMapper.xml

    <select id="list2" resultType="com.cbw.model.Book">
        select  * from t_mvc_book
      </select>
    

    3.使用resultType通過中間表BookVo返回對象
    BookVo .java

    package com.cbw.model;
    
    import java.util.List;
    
    /**
     * @author 陳公子
     * @site www.cbowen.com
     * @company zk公司
     * @create  2019-11-16 15:58
     *
     * vo類專門用來封裝多表查詢信息對象
     * 封裝查詢條件
     */
    public class BookVo extends Book{
     private List<Integer> bookIds;
     private  float min;
     private  float max;
    
        public float getMax() {
            return max;
        }
    
        public void setMax(float max) {
            this.max = max;
        }
    
        public float getMin() {
            return min;
        }
    
        public void setMin(float min) {
            this.min = min;
        }
    
        public List<Integer> getBookIds() {
            return bookIds;
        }
    
        public void setBookIds(List<Integer> bookIds) {
            this.bookIds = bookIds;
        }
    }
    
    

    BookMapper.java

    /**
     * 使用resultType返回單個對象
     * @return
     */
        List<Book> list3(BookVo bookVo);
    

    BookMapper.xml

      <select id="list3" resultType="com.cbw.model.Book" parameterType="com.cbw.model.BookVo">
        select  * from t_mvc_book where bid in
        <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
          #{bid}
        </foreach>
      </select>
    

    4.使用resultType返回List,適用于多表查詢返回結果集
    BookMapper.java

    /**
         * 使用resultType返回List<Map>,適用于多表查詢返回結果集
         *
         * @return
         */
        List<Map> list4();
    

    BookMapper.xml

    <select id="list4" resultType="java.util.Map">
      select * from t_mvc_book
    </select>
    

    5.使用resultType返回Map<String,Object>,適用于多表查詢返回單個結果集
    BookMapper.java

    /**
         * 使用resultType返回Map<String,Object>,適用于多表查詢返回單個結果集
         *
         * @return
         */
        Map list5(Map map);
    

    BookMapper.xml

    <select id="list5" resultType="java.util.Map" parameterType="java.util.Map">
      select * from t_mvc_book where bid = #{bid}
    </select>
    

    BookServiceImplTest.java

        public void list1() {
            for (Book book : this.bookService.list1()) {
                System.out.println(book);
            }
        }
        @Test
        public void list2() {
            for (Book book : this.bookService.list2()) {
                System.out.println(book);
            }
        }
        @Test
        public void list3() {
            BookVo bookVo=new BookVo();
            List bookIds= new ArrayList();
            bookIds.add(13);
            bookIds.add(16);
            bookIds.add(18);
            bookVo.setBookIds(bookIds);
            for (Book book : this.bookService.list3(bookVo)) {
                System.out.println(book);
            }
        }
        @Test
        public void list4() {
            for (Map map : this.bookService.list4()) {
                System.out.println(map);
            }
        }
        @Test
        public void list5() {
     Map map= new HashMap();
     map.put("bid",16);
            System.out.println(this.bookService.list5(map));
        }
    
    

    4、分頁查詢

    為什么要重寫mybatis的分頁?
    Mybatis的分頁功能很弱,它是基于內存的分頁(查出所有記錄再按偏移量offset和邊界limit取結果),在大數據量的情況下這樣的分頁基本上是沒有用的

    使用分頁插件步奏
    1、導入pom依賴
    2、Mybatis.cfg.xml配置攔截器
    3、使用PageHelper進行分頁
    4、處理分頁結果

    導入Pom依賴:

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.2</version>
    </dependency>
    

    Mybatis.cfg.xml配置攔截器
    注意:要遵循dtd約束,不然會報錯

    <!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
    <plugins>
        <!-- 配置分頁插件PageHelper, 4.0.0以后的版本支持自動識別使用的數據庫 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
        </plugin>
    </plugins>
    ```block
    var foo = 'bar';
    

    BookMapper.xml種的sql 語句:所用分頁插件

    <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
        select  * from t_mvc_book
        <where>
          <if test="bname !=null and bname !=''">
          bname like #{bname}
          </if>
        </where>
      </select>
    

    BookMapper.java

    
    var foo = 'bar';  List<Map> listPager(Map map);
    

    Service層

     List<Map> listPager(Map map, PageBean pageBean);
    

    BookServiceImplTest.java

        @Test
        public void listpager() {
      Map map=new HashMap();
      map.put("bname","%圣墟%");
            PageBean pageBean=new PageBean();
            pageBean.setPagination(false);
            pageBean.setPage(3);
            for (Map m : this.bookService.listPager(map,pageBean)) {
                System.out.println(m);
            }
        }
    

    效果:

    在這里插入圖片描述

    5、特殊字符處理

    需求:獲取價格到多少之間的書籍:
    在這里插入圖片描述需要進行字符處理,處理后

    <select id="list6" resultType="com.cbw.model.Book" parameterType="com.cbw.model.BookVo">
         select  * from t_mvc_book where price &gt; #{min} and price &lt; #{max}
      </select>
    

    BookMapper

      // 特殊字符處理
        List<Book> list6(BookVo bookVo);
    

    BookServiceImplTest.java

     public void list6() {
      BookVo bookVo =new BookVo();
       bookVo.setMax(20f);
       bookVo.setMin(15f);
            for (Book book : this.bookService.list6(bookVo)) {
                System.out.println(book);
            }
    
    

    結果:
    在這里插入圖片描述

    版權聲明:本文為chenbowenleave原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/chenbowenleave/article/details/103106228

    智能推薦

    Mybatis動態sql和分頁

    我們先把所有代碼展示出來,然后在下面解釋: Mapper層: BookMapper.xml: Service層: BookServiceimpl: 測試類: 幫助類: PageBean: 1、mybatis動態sql If、trim、foreach 在mybatis中if和trim可以通過****自動生成,所以我們就只演示foreach; 我們現在Mapper層寫入一個方法: 實現方法: fore...

    mybatis動態sql和分頁

    1、mybatis動態sql 1 foreach 遍歷集合,批量查詢、通常用于in關鍵字 2、模糊查詢 #{…} ${…} Concat 2.1 參數中直接加入%% 2.2 使用${…}代替#{…}(不建議使用該方式,有SQL注入風險) 關鍵:#{…}與KaTeX parse error: Expected 'EOF', got...

    Mybatis動態sql和分頁

    1、mybatis動態sql If、trim、foreach 定義查詢方法 注意:@Param 當你形參要在mapper.xml中使用就需要加上注解 測試類 2、模糊查詢 常用的模糊查詢方法 推薦的兩種: 結果: 3、查詢返回結果集的處理 resultMap:適合使用返回值是自定義實體類的情況 resultType:適合使用返回值的數據類型是非自定義的,即jdk的提供的類型 3.1 使用resul...

    mybatis動態sql和分頁

    前言: 通過對mybatis入門的了解,我們知道了mybatis是可以動態生成dao接口和實體類以及實體映射文件的。 mybatis動態sql 我們的dao方法是和實體映射文件在一起的,都在dao接口名.xml文件里面的 如圖所示: 接下來我們來演示動態添加我們的dao方法 在我們的dao接口BookMapper.java里面寫我們的方法接口 按住alt+Enter,選擇如圖所示: 這樣就會在Bo...

    Mybatis動態sql和分頁

    文章目錄 mybatis動態sql 模糊查詢(3種方式) 查詢返回結果集的處理 分頁查詢 特殊字符處理 代碼 mybatis動態sql 著重講一下foreach : 作用:foreach 遍歷集合,批量查詢、通常用于in關鍵字 用foreach記得接口里面注意加個注解不然會報錯 collection:數據源 item:數據源賦予的變量 open:打開 close:關閉 separator:分隔符 ...

    猜你喜歡

    mybatis之動態sql和分頁

    mybatis動態sql If、trim、foreach If: if是條件,如果傳的值不為空,那么這個字段就可以發生改變;如果傳的值為空,那么執行sql的時候這個字段就看不到了 **trim:**去空格 舉例: foreach: 如果形參要在mapper.xml中使用就需要加上注解 如:(@Param(“bookIds”)) 測試類 2、模糊查詢 常用的模糊查詢方法 推薦...

    Mybatis的動態sql和分頁

    前言:Mybatis的動態sql和分頁要在完成Mubatis入門搭建下實現 Mybatis動態sql trim:去空格 if:如果 name 不為空 就進行if體拼接 foreach:遍歷集合 批量查詢 通常用于in關鍵字 模糊查詢 BookMapper BookMapper.xml BookService BookServiceImpl 測試類BookServiceImplTest 運行都如下:...

    數組刪除其中某個對象的方法

    數組刪除其中的對象或元素,在前端是比較常見的需求。 我現在比較常用的方法如下: 這種方法只適合刪除具有唯一標識的對象。 有沒有想要脫單的小伙伴,加入我們的脫單星球,認識更多優秀的小哥哥小姐姐 特此聲明,星球是免費的,但是創建星球的時候說是必須輸入金額,所以只能先私聊,我再加你免費加入!...

    圖床搭建以及圖床工具的使用

    為什么要用圖床和圖床工具? 比較下面三種md中的圖片url地址(均免費),你會使用哪一種? 選1?由于是本地路徑,文檔分享后給其他人打開后很可能顯示圖片加載失敗。 選2?雖然分享后可以顯示圖片,但能保證加載速度? 選3?我肯定選這種,即兼容2的瀏覽器訪問,又能保證訪問速度。 這樣就可以回答上面的問題了!保證瀏覽器訪問要用圖床,保證加載速度要用圖床工具,又不花錢想想就開心。 除此之外本篇博客還會講解...

    并發編程理論篇

    一、必備知識回顧 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之后能夠像人一樣去工作,并且它比人的工作效率更高,因為可以24小時不間斷 計算機五大組成部分 控制器 運算器 存儲器 輸入設備 輸出設備 計算機的核心真正干活的是CPU(控制器+運算器=中央處理器) 程序要想被計算機運行,它的代碼必須要先由硬盤讀到內存,之后cpu取指再執行 并發 看起來像同時運行的就可以稱之為并發 并行 真正...

    精品国产乱码久久久久久蜜桃不卡