欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)分頁的幾種方法詳細(xì)解析

 更新時(shí)間:2023年11月10日 09:42:29   作者:老周聊架構(gòu)  
這篇文章主要介紹了Java實(shí)現(xiàn)分頁的幾種方法詳細(xì)解析,在Java中想實(shí)現(xiàn)分頁功能有幾種常用的方法,今天我們就來詳細(xì)解析一下,文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下

一、limit關(guān)鍵字

service層

@Service
@Transactional
public class ImplStudentService implements StudentService {
@Resource
private  StudentDao  studentDao;
    @Override
    public List<Student>  selectAllStudent(String province, Integer offset, Integer limit) {
        return studentDao.selectAll(province,offset,limit);
    }
}

sql語句

select * from student where province = #{province}  limit #{offset},#{limit}

二、hibernate分頁

service層

  @Override
  public List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {
  // 分頁數(shù)據(jù)
  int[] startIdAndCount = new int[2];
  startIdAndCount[0] = pageNo * pageSize;
  startIdAndCount[1] = pageSize;
  return studentDao.selectStudentsByPage(startIdAndCount);
 }

dao層

@Override
public List findByHqlPage(int[] startIdAndCount) throws Exception {
	String hql = "...";
	try {
		Query query = getSession().createQuery(hql);
		// 設(shè)置分頁
		if (startIdAndCount != null && startIdAndCount.length > 0) {
			int rowStartIdx = Math.max(0, startIdAndCount[0]);
			if (rowStartIdx > 0) {
				query.setFirstResult(rowStartIdx);// 設(shè)置開始取值的索引
			}
			if (startIdAndCount.length > 1) {
				int rowCount = Math.max(0, startIdAndCount[1]);
				if (rowCount > 0) {
				query.setMaxResults(rowCount);// 設(shè)置結(jié)束取值的索引
				}
			}
		}
		return query.list();
	} catch (RuntimeException re) {
		log.error("分頁查詢失??!", re);
		throw re;
	}
}

三、截取List查詢結(jié)果分頁(簡(jiǎn)單粗暴)

List<StudentEnroll> students = studentlDao.getAllStudents();
int count = 0;
if(studentEnrolls != null && studentEnrolls.size() > 0) {
	count = studentEnrolls.size();
	int fromIndex = pageNo * pageSize;
	int toIndex = (pageNo + 1) * pageSize;
	if(toIndex > count) {
		toIndex = count;
	}
	List<StudentEnroll> pageList = studentEnrolls.subList(fromIndex, toIndex);

四、mybatis框架pageHelper插件分頁

Spring整合:

導(dǎo)入pom.xml

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
 <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.2</version>
 </dependency>

配置項(xiàng)目配置文件(我在spring和mybatis整合的配置文件中配置的,如果在mybatis核心配置文件中配置,百度一下)

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 依賴數(shù)據(jù)源 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 注冊(cè)加載myBatis映射文件 -->
        <property name="mapperLocations">
            <array>
                <value>classpath*:com/yyz/mapper/*Mapper.xml</value>
            </array>
        </property>
        <!-- PageHelper分頁配置 -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--使用下面的方式配置參數(shù),一行配置一個(gè),后面會(huì)有所有的參數(shù)介紹 -->
                        <value>
                    <!--helperDialect屬性來指定分頁插件使用哪種方言。-->
                            helperDialect=mysql
                    <!--分頁合理化參數(shù),設(shè)置為true時(shí),pageNum<=0時(shí)會(huì)查詢第一頁,pageNum>pages(超過總數(shù)時(shí)),會(huì)查詢最后一頁。-->
                            reasonable=true
                    <!--為了支持startPage(Object params)方法,增加了該參數(shù)來配置參數(shù)映射,用于從對(duì)象中根據(jù)屬性名取值,
                        可以配置 pageNum,pageSize,count,pageSizeZero,reasonable-->
                            params=count=countSql
                    <!--支持通過Mapper接口參數(shù)來傳遞分頁參數(shù),默認(rèn)值false,分頁插件會(huì)從查詢方法的參數(shù)值中,自動(dòng)根據(jù)上面 params 配
                     置的字段中取值,查找到合適的值時(shí)就會(huì)自動(dòng)分頁。-->
                            supportMethodsArguments=true
                    <!--默認(rèn)值為 false。設(shè)置為 true 時(shí),允許在運(yùn)行時(shí)根據(jù)多數(shù)據(jù)源自動(dòng)識(shí)別對(duì)應(yīng)方言的分頁-->
                            autoRuntimeDialect=true
                        </value>
                    </property>
                </bean>
            </array>
        </property>
        <!-- 給數(shù)據(jù)庫實(shí)體起別名 -->
        <property name="typeAliasesPackage" value="com.yyz.entity;"/>
 </bean>

SpringBoot整合:

<!--分頁插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

配置項(xiàng)目application.yml文件

#bybatis分頁插件配置
pagehelper:
  helper-dialect: mysql  #數(shù)據(jù)庫
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

標(biāo)題分頁插件參數(shù):

分頁插件提供了多個(gè)可選參數(shù),這些參數(shù)使用時(shí),按照上面配置方式中的示例配置即可。

分頁插件可選參數(shù)如下:

  • dialect:默認(rèn)情況下會(huì)使用 PageHelper 方式進(jìn)行分頁,如果想要實(shí)現(xiàn)自己的分頁邏輯,可以實(shí)現(xiàn) Dialect(com.github.pagehelper.Dialect) 接口,然后配置該屬性為實(shí)現(xiàn)類的全限定名稱。 使用自定義 dialect 實(shí)現(xiàn)時(shí),下面的參數(shù)沒有任何作用。
  • helperDialect:分頁插件會(huì)自動(dòng)檢測(cè)當(dāng)前的數(shù)據(jù)庫鏈接,自動(dòng)選擇合適的分頁方式。 oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby 特別注意:使用 SqlServer2012 數(shù)據(jù)庫時(shí),需要手動(dòng)指定為 sqlserver2012,否則會(huì)使用 SqlServer2005 的方式進(jìn)行分頁。
  • offsetAsPageNum:默認(rèn)值為 false,該參數(shù)對(duì)使用 RowBounds 作為分頁參數(shù)時(shí)有效。 當(dāng)該參數(shù)設(shè)置為 true 時(shí),會(huì)將 RowBounds 中的 offset 參數(shù)當(dāng)成 pageNum 使用,可以用頁碼和頁面大小兩個(gè)參數(shù)進(jìn)行分頁。
  • rowBoundsWithCount:默認(rèn)值為false,該參數(shù)對(duì)使用 RowBounds 作為分頁參數(shù)時(shí)有效。 當(dāng)該參數(shù)設(shè)置為true時(shí),使用 RowBounds 分頁會(huì)進(jìn)行 count 查詢。
  • pageSizeZero:默認(rèn)值為 false,當(dāng)該參數(shù)設(shè)置為 true 時(shí),如果 pageSize=0 或者 RowBounds.limit = 0 就會(huì)查詢出全部的結(jié)果(相當(dāng)于沒有執(zhí)行分頁查詢,但是返回結(jié)果仍然是 Page 類型)。
  • reasonable:分頁合理化參數(shù),默認(rèn)值為false。當(dāng)該參數(shù)設(shè)置為 true 時(shí),pageNum<=0 時(shí)會(huì)查詢第一頁,pageNum>pages(超過總數(shù)時(shí)),會(huì)查詢最后一頁。默認(rèn)false 時(shí),直接根據(jù)參數(shù)進(jìn)行查詢。
  • params:為了支持startPage(Object params)方法,增加了該參數(shù)來配置參數(shù)映射,用于從對(duì)象中根據(jù)屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認(rèn)值, 默認(rèn)值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
  • supportMethodsArguments:支持通過 Mapper 接口參數(shù)來傳遞分頁參數(shù),默認(rèn)值false,分頁插件會(huì)從查詢方法的參數(shù)值中,自動(dòng)根據(jù)上面 params 配置的字段中取值,查找到合適的值時(shí)就會(huì)自動(dòng)分頁。
  • aggregateFunctions:默認(rèn)為所有常見數(shù)據(jù)庫的聚合函數(shù),允許手動(dòng)添加聚合函數(shù)(影響行數(shù)),所有以聚合函數(shù)開頭的函數(shù),在進(jìn)行 count 轉(zhuǎn)換時(shí),會(huì)套一層。其他函數(shù)和列會(huì)被替換為 count(0),其中count列可以自己配置。

重要提示:

當(dāng) offsetAsPageNum=false 的時(shí)候,由于 PageNum 問題,RowBounds查詢的時(shí)候 reasonable 會(huì)強(qiáng)制為 false。使用 PageHelper.startPage 方法不受影響。

service層

@Override
public ResponseResult selectAllStudent(Integer pageNum, Integer pageSize) {
    Map<String,Object> map = new HashMap<>();
    PageHelper.startPage(pageNum,pageSize);
    List<Student>  students = studentMapper.selectAllStudents();
    PageInfo pageInfo = new PageInfo(students);
    long total = pageInfo.getTotal();
    map.put("result",pageInfo);
    map.put("count",total);
    return ResponseResultUtil.success(map);
}

五、springData分頁

service層

Sort.Order travelDate = new Sort.Order(Sort.Direction.DESC, "travelDate");
Sort.Order createdTime = new Sort.Order(Sort.Direction.DESC, "createdTime");
Sort sort = new Sort(travelDate, createdTime);
Pageable pageable = new PageRequest(page, pageSize, sort);
List<TravelItem> items = null;
try {
    items = travelRepository.getTravelItemsByTravelDateBetweenAndUserId(theStartDate, theEndDate, openId, pageable);
} catch (Exception e) {
    throw new DatabaseRelatedException("TravelRepository異常");
}

dao層:接口繼承的是PagingAndSortingRepository接口,注意要加@Repository注解

到此這篇關(guān)于Java實(shí)現(xiàn)分頁的幾種方法詳細(xì)解析的文章就介紹到這了,更多相關(guān)Java分頁的方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java當(dāng)中讓事務(wù)回滾的幾種方式

    Java當(dāng)中讓事務(wù)回滾的幾種方式

    這篇文章主要給大家介紹了關(guān)于Java當(dāng)中讓事務(wù)回滾的幾種方式, 事務(wù)回滾通常用于在某些操作失敗時(shí)取消之前已執(zhí)行的所有操作,這樣,我們就可以保證數(shù)據(jù)的一致性,需要的朋友可以參考下
    2023-08-08
  • Java使用訪問者模式解決公司層級(jí)結(jié)構(gòu)圖問題詳解

    Java使用訪問者模式解決公司層級(jí)結(jié)構(gòu)圖問題詳解

    這篇文章主要介紹了Java使用訪問者模式解決公司層級(jí)結(jié)構(gòu)圖問題,結(jié)合實(shí)例形式分析了訪問者模式的概念、原理及Java使用訪問者模式解決公司曾經(jīng)結(jié)構(gòu)圖問題的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • Java實(shí)戰(zhàn)之藥品管理系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之藥品管理系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了利用Java實(shí)現(xiàn)的藥品管理系統(tǒng),本項(xiàng)目屬于前后端分離的項(xiàng)目,分為兩個(gè)角色藥品管理員和取藥處人員,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-04-04
  • Java如何實(shí)現(xiàn)壓縮文件與解壓縮zip文件

    Java如何實(shí)現(xiàn)壓縮文件與解壓縮zip文件

    這篇文章主要介紹了Java如何實(shí)現(xiàn)壓縮文件與解壓縮zip文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Mybatis自定義攔截器實(shí)現(xiàn)權(quán)限功能

    Mybatis自定義攔截器實(shí)現(xiàn)權(quán)限功能

    本文主要介紹了Mybatis自定義攔截器實(shí)現(xiàn)權(quán)限功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 一文帶你了解如何正確使用MyBatisPlus

    一文帶你了解如何正確使用MyBatisPlus

    在本篇文章中,我們獎(jiǎng)通過?MyBatis?Plus?來對(duì)一張表進(jìn)行?CRUD?操作,來看看是如何簡(jiǎn)化我們開發(fā)的。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • Mybatis事務(wù)如何跟Spring結(jié)合(數(shù)據(jù)庫事務(wù)特性和Spring事務(wù)管理源碼)

    Mybatis事務(wù)如何跟Spring結(jié)合(數(shù)據(jù)庫事務(wù)特性和Spring事務(wù)管理源碼)

    MyBatis與Spring的事務(wù)結(jié)合主要是通過Spring的事務(wù)管理和MyBatis的數(shù)據(jù)庫操作來實(shí)現(xiàn)的,在本文中,我們將從數(shù)據(jù)庫事務(wù)特性和Spring事務(wù)管理源碼兩個(gè)角度來分析MyBatis事務(wù)如何與Spring結(jié)合到一起的原理,感興趣的朋友一起看看吧
    2024-01-01
  • springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes

    springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes

    這篇文章主要介紹了springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • swagger2隱藏在API文檔顯示某些參數(shù)的操作

    swagger2隱藏在API文檔顯示某些參數(shù)的操作

    這篇文章主要介紹了swagger2隱藏在API文檔顯示某些參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java中為什么重寫equals()也需要重寫hashCode方法

    Java中為什么重寫equals()也需要重寫hashCode方法

    這篇文章主要介紹了Java中為什么重寫equals()也需要重寫hashCode(),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04

最新評(píng)論