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

Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)的問題(附github源碼)

 更新時間:2021年09月06日 17:11:12   作者:jeremylai  
這篇文章主要介紹了Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)(附github源碼),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

簡介

springboot

設(shè)計目的就是為了加速開發(fā),減少xml的配置。如果你不想寫配置文件只需要在配置文件添加相對應(yīng)的配置就能快速的啟動的程序。

通用mapp

通用mapper只支持對單表的操作,對單表的增刪改查,無需在mapper.xml寫對應(yīng)的sql語句,只需要我們調(diào)用相應(yīng)的接口即可。

pagehelp

pagehelper主要是在對查詢的數(shù)據(jù)進行一個分頁查詢。

首先在maven項目,在pom.xml中引入mapper和pagehelper的依賴

<!-- pagehelp -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- 通用mapper -->
		<dependency>
			<groupId>tk.mybatis</groupId>
			<artifactId>mapper-spring-boot-starter</artifactId>
			<version>1.0.0</version>
		</dependency>

2 新建一個mymapper.java文件,繼承mapper接口

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T>,ConditionMapper<T> {
  //FIXME 特別注意,該接口不能被掃描到,否則會出錯
}

這個java文件不能和其它mapper放在一起,以免被掃描到。獲取單表數(shù)據(jù)的操作都直接調(diào)用這個方法。

3 在配置文件上添加以后屬性字段

#jdbc
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/news
spring.datasource.username=數(shù)據(jù)庫用戶名
spring.datasource.password=數(shù)據(jù)庫密碼
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.freemarker.request-context-attribute=request

#mapper  
mapper.mappers=com.imooc.springboot.mapper.util.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL

#pagehelper
pagehelper.helper-dialect = mysql
pagehelper.reasonable = true
pagehelper.support-methods-arguments = true
pagehelper.params= count= countSql

上面的配置mapper.mappers 是第2步里面文件所在的路徑。

4 添加了controller文件之后,由controller里面的方法去調(diào)用server里面的方法。雖然是有通用mapper方法,但是每次添加一個server方法之后都要添加對應(yīng)的mapper方法,這樣開發(fā)的也顯得比較繁瑣,所以我們需要一個通用server類,用這個類去調(diào)用第二步的方法就可以了。

public interface BaseService<T> {
	/**
	 * 查詢所有
	 * 
	 * @return 返回所有數(shù)據(jù)
	 */
	List<T> findAll();

	/**
	 * 添加
	 * 
	 * @param t   實體
	 *          
	 * @return
	 */
	int save(T t);

	/**
	 * 修改
	 * 
	 * @param t
	 *            實體
	 * @return
	 */
	int updateByPrimaryKey(T t);

	/**
	 * 根據(jù)主鍵刪除
	 * 
	 * @param t   主鍵
	 *            
	 * @return
	 */
	int deleteByPrimaryKey(int t);
	
	/**
	 * 查詢表格列表
	 * @param t 分頁參數(shù)
	 * @return
	 */
	TableData<T> getTableData(PageBean pageBean);
}

上面只是封裝基本增刪改查的方法,后續(xù)可自行添加方法。
然后添加實現(xiàn)類

public abstract class BaseServiceImpl<T> implements BaseService<T> {
	@Autowired
	protected MyMapper<T> mapper;

	@Override
	public List<T> findAll() {
		return mapper.selectAll();
	}

	@Override
	public int save(T t) {
		return mapper.insert(t);
	}

	@Override
	public int updateByPrimaryKey(T t) {
		return mapper.updateByPrimaryKey(t);
	}

	@Override
	public int deleteByPrimaryKey(int t) {
		return mapper.deleteByPrimaryKey(t);
	}

	@Override
	public TableData<T> getTableData(PageBean bean) {
		int count = mapper.selectAll().size();
		if (count > 0) {
			PageHelper.startPage((bean.getOffset()/bean.getLimit()) + 1, bean.getLimit());
			List<T> list = this.findAll();
			return TableData.bulid(count, list);
		}

		return TableData.empty();
	}
}

注意:我用的編輯器是eclipse,如果用idea編輯器,這里可把abstract去掉。

然后添加對應(yīng)的接口和實現(xiàn)類繼承上面的接口和方法就可以了,比如添加一個newsserver 接口和newsserverImpl類

public interface NewsService extends BaseService<SysUser> {

}
@Service
public class NewsServiceImpl extends BaseServiceImpl<SysUser> implements NewsService{

}

5 為了減少數(shù)據(jù)庫服務(wù)器的壓力,一般我們查詢數(shù)據(jù)的時候都會使用pagehelper進行分頁查詢,為了更加清晰的顯示我們展示的數(shù)據(jù),使用bootstrap table展示數(shù)據(jù),bootstrap table獲取數(shù)據(jù)有兩種途經(jīng),一種是客戶端模式,即獲取全部數(shù)據(jù)之后,在前端進行分頁展示。另外一種,也就是我們接下來要說的服務(wù)端模式:要獲取的數(shù)據(jù)信息,比如獲取數(shù)據(jù)頁碼,每一頁數(shù)據(jù)的大小,都可以通過前端發(fā)送以上的參數(shù)向后臺發(fā)請求,后臺得到這些參數(shù)信息之后返回數(shù)據(jù)。
6 引入bootstrap table相關(guān)的js css文件之后,開始在網(wǎng)上找了一些資料之后發(fā)現(xiàn)很多都是要在前端頁面添加如下繁瑣的配置,

  $('#mytable').bootstrapTable({
                 //請求方法
                method: 'get',
                 //是否顯示行間隔色
                striped: true,
                //是否使用緩存,默認為true,所以一般情況下需要設(shè)置一下這個屬性(*)     
                cache: false,    
                //是否顯示分頁(*)  
                pagination: true,   
                 //是否啟用排序  
                sortable: false,    
                 //排序方式 
                sortOrder: "desc",    
                //初始化加載第一頁,默認第一頁
                //我設(shè)置了這一項,但是貌似沒起作用,而且我這默認是0,- -
                //pageNumber:1,   
                //每頁的記錄行數(shù)(*)   
                pageSize: 10,  
                //可供選擇的每頁的行數(shù)(*)    
                pageList: [10, 25, 50, 100],
                //這個接口需要處理bootstrap table傳遞的固定參數(shù),并返回特定格式的json數(shù)據(jù)  
                url: "${contextPath}/mapper/getTableData",
                //默認值為 'limit',傳給服務(wù)端的參數(shù)為:limit, offset, search, sort, order Else
                //queryParamsType:'',   
                ////查詢參數(shù),每次調(diào)用是會帶上這個參數(shù),可自定義                         
                queryParams: queryParams : function(params) {
                    var subcompany = $('#subcompany option:selected').val();
                    var name = $('#name').val();
                    return {
                          pageNumber: params.offset+1,
                          pageSize: params.limit,
                          companyId:subcompany,
                          name:name
                        };
                },
                //分頁方式:client客戶端分頁,server服務(wù)端分頁(*)
                sidePagination: "server",
                //是否顯示搜索
                search: false,  
                //Enable the strict search.    
                strictSearch: true,
                //Indicate which field is an identity field.
                idField : "id",
                columns: [],
                pagination:true
            });

每次添加一個頁面如果都要添加以上的配置信息也顯得繁瑣,不過bootstrap-table.js里面有個默認的配置,只需要修改里面的幾個配置。

contentType: 'application/json',//post請求頭 application/x-www-form-urlencoded; charset=UTF-8'
 dataType: 'json',
 sidePagination: 'server', // 改成server    

當我們點擊表格分頁頁碼的時候,獲取改變每頁顯示的頁碼時候,前端會自動調(diào)用queryParams()方法,我們需要將這些數(shù)據(jù)傳遞給后臺,

 function queryParams(params) {
			var query={};
			query["limit"] = params.limit;//第幾條數(shù)據(jù)開始
			query["offset"] = params.offset;//數(shù)據(jù)大小
			return query;
		}

6 配合上一步前端的分頁,我們就需要使用pagehelp插件了,同樣我們把這個分頁的方法放在通用server類上,

public TableData<T> getTableData(PageBean bean) {
        int count = mapper.selectAll().size();
        if (count > 0) {
            PageHelper.startPage((bean.getOffset()/bean.getLimit()) + 1, bean.getLimit());
            List<T> list = this.findAll();
            return TableData.bulid(count, list);
        }

        return TableData.empty();
    }

上面的pagehelper.startpage需要做一點改變,前端傳過來的是顯示第幾條數(shù)據(jù),但是startpage方法第一個參數(shù)是顯示第幾頁的數(shù)據(jù),所以做一個轉(zhuǎn)換pageoffset/limit +1,然后在查詢數(shù)據(jù),需要注意的是,一定要將startpage方法方法查詢數(shù)據(jù)語句的前一行,不能空行,或者換行。

附錄:

github源碼
demo展示

到此這篇關(guān)于Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)(附github源碼)的文章就介紹到這了,更多相關(guān)Springboot展示分頁數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot 使用maven release插件執(zhí)行版本管理及打包操作

    Springboot 使用maven release插件執(zhí)行版本管理及打包操作

    maven-release-plugin 可用于構(gòu)建release版本項目,實現(xiàn)自動打tag、遞增版本號、分發(fā)release版本jar包至倉庫,接下來通過本文給大家介紹Springboot 使用maven release插件執(zhí)行版本管理及打包操作,需要的朋友可以參考下
    2022-03-03
  • 淺談在頁面中獲取到ModelAndView綁定的值方法

    淺談在頁面中獲取到ModelAndView綁定的值方法

    下面小編就為大家分享一篇淺談在頁面中獲取到ModelAndView綁定的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot項目實現(xiàn)分布式日志鏈路追蹤

    SpringBoot項目實現(xiàn)分布式日志鏈路追蹤

    這篇文章主要給大家介紹了Spring Boot項目如何實現(xiàn)分布式日志鏈路追蹤,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • SpringBoot注解@Import原理之關(guān)于ConfigurationClassPostProcessor源碼解析

    SpringBoot注解@Import原理之關(guān)于ConfigurationClassPostProcessor源碼解析

    這篇文章主要介紹了SpringBoot注解@Import原理之關(guān)于ConfigurationClassPostProcessor源碼解析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 遠程debug調(diào)試入門

    遠程debug調(diào)試入門

    這篇文章主要介紹了Eclipse的Debug調(diào)試技巧大全(總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧嗎,希望能給你帶來幫助
    2021-06-06
  • Java實現(xiàn)List去重的方法詳解

    Java實現(xiàn)List去重的方法詳解

    本文用示例介紹Java的List(ArrayList、LinkedList等)的去重的方法。List去重的常用方法一般是:JDK8的stream的distinct、轉(zhuǎn)為HashSet、轉(zhuǎn)為TreeSet等,感興趣的可以了解一下
    2022-05-05
  • Java字符串中指定部分反轉(zhuǎn)的三種方式

    Java字符串中指定部分反轉(zhuǎn)的三種方式

    一些面試官可能在面試Java基礎(chǔ)的時候,讓你說一下字符串反轉(zhuǎn),會手撕代碼,所以下面這篇文章主要給大家介紹了關(guān)于Java字符串中指定部分反轉(zhuǎn)的三種方式,需要的朋友可以參考下
    2022-01-01
  • synchronized及JUC顯式locks?使用原理解析

    synchronized及JUC顯式locks?使用原理解析

    這篇文章主要為大家介紹了synchronized及JUC顯式locks?使用原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • SpringBoot開發(fā)案例之配置Druid數(shù)據(jù)庫連接池的示例

    SpringBoot開發(fā)案例之配置Druid數(shù)據(jù)庫連接池的示例

    本篇文章主要介紹了SpringBoot開發(fā)案例之配置Druid數(shù)據(jù)庫連接池的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 深入淺出講解Java8函數(shù)式編程

    深入淺出講解Java8函數(shù)式編程

    不管是前端還是后端開發(fā)人員,學(xué)習一些函數(shù)式編程的思想和概念,對于手頭的開發(fā)工作和以后的職業(yè)發(fā)展,都是大有裨益的,下面這篇文章主要給大家介紹了關(guān)于Java8函數(shù)式編程的相關(guān)資料,需要的朋友可以參考下
    2022-01-01

最新評論