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

【SpringBoot】MyBatis與MyBatis-Plus分頁查詢 & github中的PageHelper

這篇具有很好參考價值的文章主要介紹了【SpringBoot】MyBatis與MyBatis-Plus分頁查詢 & github中的PageHelper。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??????? 筆者寫這篇博客是因為近期遇到的關于兩者之間的分頁代碼差距,其實之前也遇見過但是沒有去整理這篇博客,但由于還是被困擾了小一會兒時間,所以還是需要加深記憶。其實會看前后端傳參解決這個問題很快、不麻煩。關于這兩個框架的分頁代碼問題主要就是在業(yè)務層和MyBatis的SQL問題。注意:這里我不展示前端接口,需要知道的是前端會傳給后端當前頁(page)以及每頁條數(shù)(size)。后端根據(jù)兩個參數(shù)去實現(xiàn)分頁(limit)。這里最容易踩坑的一個點:在MyBatis的分頁中,(當前頁需要 - 1) * size傳入#{page},而在MyBatis-Plus中的new Page(page,size),則不需要去做運算,在Plus已經做好了這一點。詳情請看下面代碼塊。

MyBatis

??????? 那么關于MyBatis這個半ORM框架來說,SQL還是需要自己去寫在xml中的或者是在注解上實現(xiàn)。這里我就采用xml種實現(xiàn)的方式去實現(xiàn)啦。為了減少代碼量(真實開發(fā)不能這樣的哈),我就將所有業(yè)務代碼都放到控制層中。

引入依賴

<!-- MyBatis框架 -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.2</version>
</dependency>
<!-- JDBC驅動 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.31</version>
</dependency>
<!-- MyBatis的分頁插件PageHelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.12</version>
</dependency>

修改yml

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/table?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456

mybatis:
  mapper-locations: classpath:mapper/*.xml  # 對應xml的位置
  type-aliases-package: com.chf.entity  # 對應namespace的實體類包名
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 日志類型
    map-underscore-to-camel-case: true  # 字段與屬性的駝峰規(guī)則

# MyBatis的分頁插件 這是最重要的
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countsql

業(yè)務代碼

@RestController
@RequestMapping("/emp")
public class EmpController{
   
    //@Autowired
    //private EmpService empService; 
    // 為了博客簡化代碼量 所以直接調用Dao層接口
    @Autowired
    private EmpMapper empMapper;

    /**
     * 分頁查詢
     * @param pageNum 當前頁數(shù)
     * @param pageSize 每頁條數(shù)
     * @return
     */
    @GetMapping("/findAll/{page}/{size}")
    public R findAll(@PathVariable("page") Integer pageNum, @PathVariable("size") Integer pageSize){
        Integer page = (pageNum - 1) * pageSize;
        List<Emp> empList = empMapper.selectByPage(page, pageSize);
        PageInfo<Emp> pageInfo = new PageInfo<>(empList);
        pageInfo.setTotal(empMapper.selectCount());
        return R.ok(pageInfo);
    }
}
@Mapper
public class EmpMapper{

    List<Emp> selectByPage(@Param("page") Integer pageNum,
                           @Param("size") Integer pageSize);

    Integer selectCount();
}

SQL

<!--返回前端的分頁信息 這里的數(shù)據(jù)表字段名有點不規(guī)范-->
<select id="selectByPage" resultType="Emp">
    SELECT
        id,name,sex,idcard,phonenum,depart
    FROM
        emp
    LIMIT
        #{page},#{size}
</select>

<!--返回前端的總記錄條數(shù)-->
<select id="selectCount" resultType="java.lang.Integer">
    SELECT
        count(*)
    FROM
        emp
</select>

測試返回數(shù)據(jù)

??????? 返回的分頁信息是在data中的list

mybatisplus分頁插件和pagehelper,框架及實戰(zhàn),mybatis,spring boot,java

MyBatis-Plus

引入依賴

<!--整合MyBatis
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.3</version>
</dependency>
-->
<!--
	這里需要注意哈:如果使用了MyBatis-Plus的話就不能引入MyBatis依賴 否則會報錯
    可能也不是因為兩個不能互存 只是版本之間產生了依賴 報錯原因如下圖所示
-->
<!--數(shù)據(jù)源配置-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.22</version>
</dependency>
<!--MyBatis-Plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
<!--JDBC-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

mybatisplus分頁插件和pagehelper,框架及實戰(zhàn),mybatis,spring boot,java

修改yml

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/table?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml  # 對應xml的位置
  type-aliases-package: com.chf.entity  # 對應namespace的實體類包名
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 日志類型
    map-underscore-to-camel-case: true  # 字段與屬性的駝峰規(guī)則

業(yè)務代碼

@RestController
@RequestMapping("/emp")
public class EmpController{
   
    @Autowired
    private EmpService empService; 

    /**
     * 分頁查詢
     * @param pageNum 當前頁數(shù)
     * @param pageSize 每頁條數(shù)
     * @return
     */
    @GetMapping("/findAll/{page}/{size}")
    public R findAll(@PathVariable("page") Integer pageNum, @PathVariable("size") Integer pageSize){
        Page<Emp> page = new Page<>(pageNum, pageSize);
        // 此方法還可以傳入第二個參數(shù):QueryWrapper條件構造器
        // 用于增添一些查詢條件用的 這里就不做展示了
        empService.page(page);
        // 如果是調用數(shù)據(jù)訪問層的就是selectPage()方法即以下語句
        // mapper.selectPage(page, QueryWrapper);
        return R.ok(page);
    }
}
public interface EmpService extends IService<Emp> {
}
@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService {
}
@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}

測試返回數(shù)據(jù)

??????? 可以看到在MyBatis-Plus返回前端的參數(shù)中使用records封裝分頁信息??吹竭@里以為結束了嗎?仔細看total(總條數(shù))會發(fā)現(xiàn)怎么會是0?還有pages(總頁數(shù))也是0,學過MyBatis-Plus應該都知道為了完成分頁所以還需要配置分頁插件才可以實現(xiàn)真正的分頁。所以需要再添加一個配置類,代碼如下:

mybatisplus分頁插件和pagehelper,框架及實戰(zhàn),mybatis,spring boot,java

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

???????? 添加好分頁插件再次查詢接口就會看到總條數(shù)和總頁數(shù)都是真實的數(shù)值了。

mybatisplus分頁插件和pagehelper,框架及實戰(zhàn),mybatis,spring boot,java

PageHelper

??????? 其實MyBatis底層就是調用Github的PageHelper插件工具。但是如果直接使用Github的分頁的話會更加簡便,但是有一個坑。只需要將上面MyBatis的業(yè)務代碼改為以下代碼塊。相比而言,代碼行數(shù)一致。多了一句PageMethod.startPage()、少了一句設置總條數(shù)的語句。

業(yè)務代碼

@RestController
@RequestMapping("/emp")
public class EmpController{
   
    //@Autowired
    //private EmpService empService; 
    // 為了博客簡化代碼量 所以直接調用Dao層接口
    @Autowired
    private EmpMapper empMapper;

    /**
     * 分頁查詢
     * @param pageNum 當前頁數(shù)
     * @param pageSize 每頁條數(shù)
     * @return
     */
    @GetMapping("/findAll/{page}/{size}")
    public R findAll(@PathVariable("page") Integer pageNum, @PathVariable("size") Integer pageSize){
        // 由于PageHelper繼承PageMethod但未重寫方法 所以寫成下面的語句
        Page<Object> page = PageMethod.startPage(pageNum, pageSize);

        // 獲取查詢出的列表
        List<Emp> empList = empMapper.selectByPage(page, pageSize);
        PageInfo<Emp> pageInfo = new PageInfo<>(empList);
        // pageInfo.setTotal(empMapper.selectCount());

        // 此時page已經有列表信息、與總條數(shù)了 無需再一條SQL查詢總條數(shù)
        return R.ok(page);
    }
}
?

踩坑

??????? 這里的踩坑處就是Page對象一定要在想要查詢的列表前先初始出來,否則過濾無效。這樣子Paga中的列表信息才是我們想要的查詢出來的信息。比如說:業(yè)務中我需要查詢A、B列表進行拼接啥的。主要是為了返回A列表的數(shù)據(jù),所以只有以下兩種組合方式(大于號表示業(yè)務代碼中靠前出現(xiàn)):

??????? Page > AList > BList。BList > Page > AList。

??????? 關于這個問題。我很好奇的追入源碼中閱讀。在PageMethod的startPage()中對Page對象進行設置。并且多了一步判斷當前線程(ThreadLocal)是否存在Page對象。不存在則創(chuàng)建,存在則直接分頁。至于源碼追蹤請參考這篇文章:Mybatis第三方PageHelper插件分頁原理-騰訊云開發(fā)者社區(qū)-騰訊云文章來源地址http://www.zghlxwxcb.cn/news/detail-769017.html

public abstract class PageMethod {

    protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal();

    public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
        Page<E> page = new Page(pageNum, pageSize, count);
        page.setReasonable(reasonable);
        page.setPageSizeZero(pageSizeZero);

        // 判斷當前線程中是否存在Page對象(執(zhí)行排序Order by之后) 
        Page<E> oldPage = getLocalPage(); // (Page)LOCAL_PAGE.get()
        if (oldPage != null && oldPage.isOrderByOnly()) {
            page.setOrderBy(oldPage.getOrderBy());
        }

        setLocalPage(page); // LOCAL_PAGE.set(page);
        return page;
    }

}

到了這里,關于【SpringBoot】MyBatis與MyBatis-Plus分頁查詢 & github中的PageHelper的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • MyBatis-Plus分頁查詢(快速上手運用)

    MyBatis-Plus分頁查詢(快速上手運用)

    Mybatis-Plus知識點[MyBatis+MyBatis-Plus的基礎運用]_心態(tài)還需努力呀的博客-CSDN博客?? Mybatis-Plus+SpringBoot結合運用_心態(tài)還需努力呀的博客-CSDN博客 MyBaits-Plus中@TableField和@TableId用法_心態(tài)還需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作(通過id更新和條件更新)_心態(tài)還需努力呀的博

    2024年02月16日
    瀏覽(22)
  • mybatis-plus分頁查詢三種方法

    mybatis-plus分頁查詢三種方法

    說明: 1、mybatis-plus中分頁接口需要包含一個IPage類型的參數(shù)。 2、多個實體參數(shù),需要添加@Param參數(shù)注解,方便在xml中配置sql時獲取參數(shù)值。 注意這里我雖然加了@Param但是我并沒有使用 這是控制臺打印的查詢語句,大家發(fā)現(xiàn)最后的LIMIT 函數(shù)沒,正常來說mybatis-plus里是沒有寫

    2024年01月25日
    瀏覽(19)
  • mybatis-plus 多表關聯(lián)條件分頁查詢

    mybatis-plus 多表關聯(lián)條件分頁查詢

    此處以一對多,條件分頁查詢?yōu)槔?主表 明細表 0.請求dto 1.Controller 層: 注:我的項目中進行了service 讀寫分類配置,實際使用中,直接使用mybatis-plus中的 IUserService 對應的接口就行。 2.service 層 service impl實現(xiàn)層: 3.mapper 層 4.mapper.xml層 5.測試: 結果body: Q:todo page 分頁會把

    2024年02月12日
    瀏覽(30)
  • 窺探系列之Mybatis-plus XML分頁查詢

    窺探系列之Mybatis-plus XML分頁查詢

    Page類在mybatisPlus中用于分頁查詢,繼承Pagination類,Pagination類的searchCount字段控制是否查詢總記錄數(shù) 順著看哪里用到了searchCount: com.baomidou.mybatisplus.plugins.PaginationInterceptor 是mybatisPlus的一個插件,也就是說mybatis是通過插件的方式在分頁的時候查詢總數(shù); 紅圈中使用sql解析包

    2024年02月13日
    瀏覽(25)
  • Mybatis-Plus分頁插件查詢慢解決方案

    Mybatis-Plus分頁插件查詢慢解決方案

    需求反饋前端界面查詢速度很慢。 f12查看接口響應時間達到了5.47s。 查看后端代碼邏輯,就是傳了些參數(shù),分頁查詢了一個列表的數(shù)據(jù)。分頁插件使用的是mybatis-plus的分頁插件,PaginationInterceptor。 把后端調用的sql單獨拿出來在navicat中進行執(zhí)行,才0.54s左右,其實很快了,數(shù)

    2024年02月11日
    瀏覽(18)
  • springboot使用Mybatis-plus分頁插件

    在? pom.xml ? 文件中添加 MyBatis Plus 和分頁插件的依賴: 注意替換? {mybatis-plus-version} ?為對應的版本號。 在 Spring Boot 的配置文件? application.yml ? 中添加分頁插件的配置參數(shù): 注意代碼中的注釋,其中 ? PaginationInterceptor ?表示使用 MyBatis Plus 提供的分頁插件。 在接口層使用

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

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

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

    2024年02月01日
    瀏覽(25)
  • SpringBoot 結合 mybatis-plus 實現(xiàn)分頁功能

    SpringBoot 結合 mybatis-plus 實現(xiàn)分頁功能

    ????????要實現(xiàn)分頁功能方法有很多,但最基本的實現(xiàn)原理都差不多,所以在實現(xiàn)功能之前要先把原理搞明白。正如刪除有 “邏輯刪除”? 和 “物理刪除\\\" 之分,分頁也有 “邏輯分頁” 和 “物理分頁”; 1、邏輯分頁:邏輯分頁依賴于代碼。(Mybatis自帶的分頁插件就是邏

    2024年02月06日
    瀏覽(17)
  • mybatis-plus技巧--動態(tài)表名-多語句-拼接sql--關于mybatis的mysql分頁查詢總數(shù)的優(yōu)化思考

    mybatis-plus技巧--動態(tài)表名-多語句-拼接sql--關于mybatis的mysql分頁查詢總數(shù)的優(yōu)化思考

    傳入tableName參數(shù)就可以了,不過只能用$不能用# 因為#會發(fā)生預編譯,然后會在表名上加引號’\\\'。 新建一個表名攔截類實現(xiàn)TableNameHandler mybatisPlus添加插件 實例: 每天按統(tǒng)計 如果表名為count則加上今天的時間 每次設置 直接設置名字,然后就會改變的。 需要在配置文件中的

    2024年01月16日
    瀏覽(23)
  • Mybatis-Plus詳解(新建maven項目、查詢所有信息、打印SQL日志、實現(xiàn)CRUD(增刪改查)、分頁、條件查詢且分頁,前后端分離式開發(fā))

    Mybatis-Plus詳解(新建maven項目、查詢所有信息、打印SQL日志、實現(xiàn)CRUD(增刪改查)、分頁、條件查詢且分頁,前后端分離式開發(fā))

    MyBatis-Plus(opens new window) (簡稱MP) 是一個MyBatis(opens new window)的增強工具,在MyBatis的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生。想查看官網相關內容的化我這里提供了官網地址:https://baomidou.com/ 無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產生影響,如絲般

    2024年02月04日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包