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

MyBatis-Plus 實現(xiàn)分頁的幾種寫法

這篇具有很好參考價值的文章主要介紹了MyBatis-Plus 實現(xiàn)分頁的幾種寫法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

簡介

MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window)的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。

特性

  • 無侵入:只做增強(qiáng)不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑

  • 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向?qū)ο蟛僮?/p>

  • 強(qiáng)大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需求

  • 支持 Lambda 形式調(diào)用:通過 Lambda 表達(dá)式,方便的編寫各類查詢條件,無需再擔(dān)心字段寫錯

  • 支持主鍵自動生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實體類只需繼承 Model 類即可進(jìn)行強(qiáng)大的 CRUD 操作

  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用

  • 內(nèi)置分頁插件:基于 MyBatis 物理分頁,開發(fā)者無需關(guān)心具體操作,配置好插件之后,寫分頁等同于普通 List 查詢

  • 分頁插件支持多種數(shù)據(jù)庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫

  • 內(nèi)置性能分析插件:可輸出 SQL 語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪出慢查詢

  • 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作

支持?jǐn)?shù)據(jù)庫

任何能使用 MyBatis 進(jìn)行 CRUD, 并且支持標(biāo)準(zhǔn) SQL 的數(shù)據(jù)庫,具體支持情況如下,如果不在下列表查看分頁部分教程 PR 您的支持。
  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,F(xiàn)irebird,Cubrid,Goldilocks,csiidb,informix,TDengine,redshift

  • 達(dá)夢數(shù)據(jù)庫,虛谷數(shù)據(jù)庫,人大金倉數(shù)據(jù)庫,南大通用(華庫)數(shù)據(jù)庫,南大通用數(shù)據(jù)庫,神通數(shù)據(jù)庫,瀚高數(shù)據(jù)庫,優(yōu)炫數(shù)據(jù)庫

快速開始

添加依賴

全新的 MyBatis-Plus 3.0 版本基于 JDK8,提供了 lambda 形式的調(diào)用,所以安裝集成 MP3.0 要求如下:

  • JDK 8+

  • Maven or Gradle

Spring Boot項目

maven:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

Spring 項目

maven:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>最新版本</version>
</dependency>

配置

在 application.yml 配置文件中添加 H2 數(shù)據(jù)庫的相關(guān)配置:

# DataSource Config
spring:
  datasource:
    driver-class-name: org.h2.Driver
    schema: classpath:db/schema-h2.sql
    username: root
    password: test
  sql:
    init:
      schema-locations: classpath:db/schema-h2.sql
      data-locations: classpath:db/data-h2.sql

在 Spring Boot 啟動類中添加 @MapperScan 注解,掃描 Mapper 文件夾:

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Page分頁

方式一:

使用mybatis-plus 的 Service page 接口


    @GetMapping("/pageList")
    @ApiOperation(value = "分頁列表", notes = "query和user")
    public R<IPage<User>> pageList(@ApiIgnore User user, Query query) {
        //無條件分頁
        IPage<User> pages = userService.page(Condition.getPage(query));
        //有條件分頁
        IPage<User> pages = userService.page(Condition.getPage(query), Wrappers.lambdaQuery(user));
        return R.data(pages);
    }

方式二:

自定義sql分頁


controller層代碼:

    @GetMapping("/pageList")
   @ApiOperation(value = "分頁列表", notes = "query和user")
    public R<IPage<User>> pageList(@ApiIgnore User user, Query query) {
        IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user);
        return R.data(pages);
    }

service 里調(diào)用自定義分頁sql mapper方法

  @Override
    public IPage<User> selectUserPage(IPage<User> page, User user) {
        return page.setRecords(baseMapper.selectUserPage(page, user));
    }

定義mapper分頁接口:


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gis.spacedata.bladex.domain.entity.system.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

import java.util.List;

public interface UserMapper extends BaseMapper<User> {

    List<User> selectUserPage(IPage<User> page, @Param("user") User user);

}

mybatis xml:

    <select id="selectUserPage" resultMap="userResultMap">
        select * from blade_user where is_deleted = 0
        <if test="user.tenantId!=null and user.tenantId != ''">
            and tenant_id = #{user.tenantId}
        </if>
        <if test="user.account!=null and user.account != ''">
            and account like CONCAT('%',#{user.account},'%')
        </if>
        <if test="user.realName!=null and user.realName != ''">
            and real_name like CONCAT('%',#{user.realName},'%')
        </if>
        <if test="user.roleId!=null and user.roleId != ''">
            and CAST(#{user.roleId} AS VARCHAR)= ANY(STRING_TO_ARRAY(role_id, ','))
        </if>
        ORDER BY id
    </select>

Condition 工具類:


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springblade.core.launch.constant.TokenConstant;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;

import java.util.Map;

/**
 * 分頁工具
 *
 * @author Chill
 */
public class Condition {

    /**
     * 轉(zhuǎn)化成mybatis plus中的Page
     *
     * @param query 查詢條件
     * @return IPage
     */
    public static <T> IPage<T> getPage(Query query) {
        Page<T> page = new Page<>(Func.toInt(query.getCurrent(), 1), Func.toInt(query.getSize(), 10));
        page.setAsc(Func.toStrArray(SqlKeyword.filter(query.getAscs())));
        page.setDesc(Func.toStrArray(SqlKeyword.filter(query.getDescs())));
        return page;
    }

    /**
     * 獲取mybatis plus中的QueryWrapper
     *
     * @param entity 實體
     * @param <T>    類型
     * @return QueryWrapper
     */
    public static <T> QueryWrapper<T> getQueryWrapper(T entity) {
        return new QueryWrapper<>(entity);
    }

    /**
     * 獲取mybatis plus中的QueryWrapper
     *
     * @param query 查詢條件
     * @param clazz 實體類
     * @param <T>   類型
     * @return QueryWrapper
     */
    public static <T> QueryWrapper<T> getQueryWrapper(Map<String, Object> query, Class<T> clazz) {
        Kv exclude = Kv.create().set(TokenConstant.HEADER, TokenConstant.HEADER)
            .set("current", "current").set("size", "size").set("ascs", "ascs").set("descs", "descs");
        return getQueryWrapper(query, exclude, clazz);
    }

    /**
     * 獲取mybatis plus中的QueryWrapper
     *
     * @param query   查詢條件
     * @param exclude 排除的查詢條件
     * @param clazz   實體類
     * @param <T>     類型
     * @return QueryWrapper
     */
    public static <T> QueryWrapper<T> getQueryWrapper(Map<String, Object> query, Map<String, Object> exclude, Class<T> clazz) {
        exclude.forEach((k, v) -> query.remove(k));
        QueryWrapper<T> qw = new QueryWrapper<>();
        qw.setEntity(BeanUtil.newInstance(clazz));
        SqlKeyword.buildCondition(query, qw);
        return qw;
    }

}

方式三:

使用mybatis-plus的Db類

說明:

  • 使用靜態(tài)調(diào)用的方式,執(zhí)行CRUD方法,避免Spring環(huán)境下Service循環(huán)注入、簡潔代碼,提升效率

  • 需要項目中已注入對應(yīng)實體的BaseMapper

  • 完整使用方式見: 測試用例(opens new window)

  • 對于參數(shù)為Wrapper的,需要在Wrapper中傳入Entity或者EntityClass供尋找對應(yīng)的Mapper

  • 不建議在循環(huán)中調(diào)用,如果是批量保存,建議將數(shù)據(jù)構(gòu)造好后使用 Db.saveBatch(數(shù)據(jù)) 保存



    @Test
    void testPage() {
        IPage<Entity> page = Db.page(new Page<>(1, 1), Entity.class);
        Assertions.assertEquals(2, page.getTotal());
        page = Db.page(new Page<>(1, 1), Wrappers.lambdaQuery(Entity.class));
        Assertions.assertEquals(1, page.getRecords().size());
    }

Page分頁插件

奇怪的是,它查詢出來的數(shù)據(jù)還是所有數(shù)據(jù),并沒有起到我們的分頁效果

我們都知道分頁的原理是where limit ?,?

那是不是只要在這條查詢語句后加上where條件就好了,我們可以把這條語句攔截下來,為它添加我們的where條件,這也是AOP思想的提現(xiàn)(在原有代碼上只進(jìn)行增強(qiáng),不做修改)

插件主體MybatisPlusInterceptor

該插件是核心插件,目前代理了 Executor#query 和 Executor#update 和 StatementHandler#prepare 方法

InnerInterceptor

我們提供的插件都將基于此接口來實現(xiàn)功能

目前已有的功能:

  • 自動分頁: PaginationInnerInterceptor

  • 多租戶: TenantLineInnerInterceptor

  • 動態(tài)表名: DynamicTableNameInnerInterceptor

  • 樂觀鎖: OptimisticLockerInnerInterceptor

  • sql 性能規(guī)范: IllegalSQLInnerInterceptor

  • 防止全表更新與刪除: BlockAttackInnerInterceptor

分頁插件配置

Spring事務(wù)、MybatisPlus分頁插件、Mybatis包掃描等配置


import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * spring事務(wù)、MybatisPlus分頁插件、mybatis包掃描等配置
 *
 * @author tarzan liu
 * @since JDK1.8
 * @date 2021年5月11日
 */
@EnableTransactionManagement
@Configuration
@MapperScan(basePackages = "com.tarzan.**.mapper")
public class MybatisPlusConfig {

    /**
     * 分頁插件
     */
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setMaxLimit(-1L);
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
        return mybatisPlusInterceptor;
    }
}

代碼中paginationInnerInterceptor.setMaxLimit(-1L);意思是不做最大分頁數(shù)量限制,默認(rèn)的話,最大限制是,一頁500條數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-807967.html

到了這里,關(guān)于MyBatis-Plus 實現(xiàn)分頁的幾種寫法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • mybatis-plus分頁total為0,分頁失效,mybatis-plus多租戶插件使用

    背景:項目使用mybatis分頁插件不生效,以及多租戶使用時讀取配置異常 多租戶插件使用遇到的問題: 最開始在MyTenantLineHandler中使用 @Value(\\\"${tables}\\\"),服務(wù)啟動時能從配置中心拉取到配置,但在運行時獲取到的值為空,試了很多方法都不生效,后面將配置中心的配置在調(diào)用My

    2024年02月06日
    瀏覽(22)
  • mybatis-plus分頁方式

    mybatis-plus分頁方式

    概述 MyBatisPlus中提供的(自帶的)分頁插件,非常簡單,只需要簡單的配置就可以實現(xiàn)分頁功能。 詳細(xì)步驟: 第一步::config.MybatisPlusConfig.java:配置類,配置mybatisplus的插件功能。 第二步:驗證(測試): 官網(wǎng)介紹: IXxxService.java: XxxServiceImpl.java: XxxController.java 業(yè)務(wù)(

    2024年02月16日
    瀏覽(17)
  • Mybatis-Plus手動分頁

    ?TableDataInfo ?serviceImpl.selectPageQueryUserList

    2024年02月11日
    瀏覽(17)
  • MyBatis與MyBatis-Plus的分頁以及轉(zhuǎn)換

    MyBatis和MyBatis-Plus都是Java持久化框架,用于簡化數(shù)據(jù)庫訪問和操作。它們提供了面向?qū)ο蟮姆绞絹砉芾黻P(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)。 MyBatis 是一個輕量級的持久化框架,通過XML或注解配置,將SQL語句與Java對象進(jìn)行映射,使開發(fā)者可以使用簡單的API來執(zhí)行數(shù)據(jù)庫操作。MyBatis支持動態(tài)

    2024年02月11日
    瀏覽(26)
  • Mybatis-Plus學(xué)習(xí)4 Page分頁

    Mybatis-Plus學(xué)習(xí)4 Page分頁

    ctrl + P = 查看可填的屬性類型? alt + 回車 = 自動填充數(shù)據(jù)類型 1、使用Page分頁需要先配置config類,加上攔截器 type-aliasys-package配置pojo對象別名對應(yīng)的包 自定義的Mapper的page查詢: 樂觀鎖 和 悲觀鎖 悲觀鎖: 悲觀鎖的思想是,在操作數(shù)據(jù)之前,先假設(shè)其他并發(fā)操作會對數(shù)據(jù)進(jìn)行

    2024年02月12日
    瀏覽(17)
  • MyBatis-Plus 分頁設(shè)置不生效

    MyBatis-Plus 分頁設(shè)置不生效

    在配置類上加攔截器 2.當(dāng)你設(shè)置了數(shù)據(jù)源需要在數(shù)據(jù)源上添加攔截器

    2024年02月15日
    瀏覽(18)
  • MyBatis-Plus分頁查詢(快速上手運用)

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

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

    2024年02月16日
    瀏覽(22)
  • Mybatis-plus 分頁 自定義count方法

    使用了mybatisplus 語句中有order by 語法 mybatisplus會使用 select count(*) from (子語句) TOTAL 算出total 但是會報錯 查詢條件QueryWrapper中還有order by排序條件,則生成的select count(*) from(sql) 就會報錯 除非另外還指定了 TOP、OFFSET 或 FOR XML,否則,ORDER BY 子句在視圖、內(nèi)聯(lián)函數(shù)、派生表、子查

    2024年04月23日
    瀏覽(16)
  • MyBatis-Plus Page 分頁不生效

    一、問題現(xiàn)象 使用 MyBatis-Plus 進(jìn)行分頁查詢時,傳入了 pageNum 和 pageSize,但是查詢結(jié)果沒有按照預(yù)期的效果返回。 二、問題原因 沒有對 Mybatis-Puls 進(jìn)行初始化,需要添加相應(yīng)的配置類。 三、解決方案 在項目工程中創(chuàng)建 config 目錄,在其中新建配置類 MyBatisPlusConfig.java 。 注意

    2024年02月12日
    瀏覽(14)
  • MyBatis-Plus自定義分頁模型

    MyBatis-Plus自帶的分頁模型Page有些參數(shù),我覺得不是很必要,因此自定義自己的分頁模型。該類繼承了 IPage 類,實現(xiàn)了簡單分頁模型如果你要實現(xiàn)自己的分頁模型可以繼承 Page 類或者實現(xiàn) IPage 類。因為Java是單繼承多實現(xiàn)的,所以我們使用實現(xiàn)IPage接口的方式實現(xiàn)我們自己的分

    2024年02月12日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包