Springboot 整合通用mapper和pagehelper展示分頁(yè)數(shù)據(jù)的問(wèn)題(附github源碼)
簡(jiǎn)介
springboot
設(shè)計(jì)目的就是為了加速開發(fā),減少xml的配置。如果你不想寫配置文件只需要在配置文件添加相對(duì)應(yīng)的配置就能快速的啟動(dòng)的程序。
通用mapp
通用mapper只支持對(duì)單表的操作,對(duì)單表的增刪改查,無(wú)需在mapper.xml寫對(duì)應(yīng)的sql語(yǔ)句,只需要我們調(diào)用相應(yīng)的接口即可。
pagehelp
pagehelper主要是在對(duì)查詢的數(shù)據(jù)進(jìn)行一個(gè)分頁(yè)查詢。
首先在maven項(xiàng)目,在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 新建一個(gè)mymapper.java文件,繼承mapper接口
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T>,ConditionMapper<T> {
//FIXME 特別注意,該接口不能被掃描到,否則會(huì)出錯(cuò)
}
這個(gè)java文件不能和其它mapper放在一起,以免被掃描到。獲取單表數(shù)據(jù)的操作都直接調(diào)用這個(gè)方法。
3 在配置文件上添加以后屬性字段
#jdbc spring.datasource.url=jdbc:mysql://127.0.0.1:3306/news spring.datasource.username=數(shù)據(jù)庫(kù)用戶名 spring.datasource.password=數(shù)據(jù)庫(kù)密碼 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方法,但是每次添加一個(gè)server方法之后都要添加對(duì)應(yīng)的mapper方法,這樣開發(fā)的也顯得比較繁瑣,所以我們需要一個(gè)通用server類,用這個(gè)類去調(diào)用第二步的方法就可以了。
public interface BaseService<T> {
/**
* 查詢所有
*
* @return 返回所有數(shù)據(jù)
*/
List<T> findAll();
/**
* 添加
*
* @param t 實(shí)體
*
* @return
*/
int save(T t);
/**
* 修改
*
* @param t
* 實(shí)體
* @return
*/
int updateByPrimaryKey(T t);
/**
* 根據(jù)主鍵刪除
*
* @param t 主鍵
*
* @return
*/
int deleteByPrimaryKey(int t);
/**
* 查詢表格列表
* @param t 分頁(yè)參數(shù)
* @return
*/
TableData<T> getTableData(PageBean pageBean);
}
上面只是封裝基本增刪改查的方法,后續(xù)可自行添加方法。
然后添加實(shí)現(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編輯器,這里可把a(bǔ)bstract去掉。
然后添加對(duì)應(yīng)的接口和實(shí)現(xiàn)類繼承上面的接口和方法就可以了,比如添加一個(gè)newsserver 接口和newsserverImpl類
public interface NewsService extends BaseService<SysUser> {
}
@Service
public class NewsServiceImpl extends BaseServiceImpl<SysUser> implements NewsService{
}
5 為了減少數(shù)據(jù)庫(kù)服務(wù)器的壓力,一般我們查詢數(shù)據(jù)的時(shí)候都會(huì)使用pagehelper進(jìn)行分頁(yè)查詢,為了更加清晰的顯示我們展示的數(shù)據(jù),使用bootstrap table展示數(shù)據(jù),bootstrap table獲取數(shù)據(jù)有兩種途經(jīng),一種是客戶端模式,即獲取全部數(shù)據(jù)之后,在前端進(jìn)行分頁(yè)展示。另外一種,也就是我們接下來(lái)要說(shuō)的服務(wù)端模式:要獲取的數(shù)據(jù)信息,比如獲取數(shù)據(jù)頁(yè)碼,每一頁(yè)數(shù)據(jù)的大小,都可以通過(guò)前端發(fā)送以上的參數(shù)向后臺(tái)發(fā)請(qǐng)求,后臺(tái)得到這些參數(shù)信息之后返回?cái)?shù)據(jù)。
6 引入bootstrap table相關(guān)的js css文件之后,開始在網(wǎng)上找了一些資料之后發(fā)現(xiàn)很多都是要在前端頁(yè)面添加如下繁瑣的配置,
$('#mytable').bootstrapTable({
//請(qǐng)求方法
method: 'get',
//是否顯示行間隔色
striped: true,
//是否使用緩存,默認(rèn)為true,所以一般情況下需要設(shè)置一下這個(gè)屬性(*)
cache: false,
//是否顯示分頁(yè)(*)
pagination: true,
//是否啟用排序
sortable: false,
//排序方式
sortOrder: "desc",
//初始化加載第一頁(yè),默認(rèn)第一頁(yè)
//我設(shè)置了這一項(xiàng),但是貌似沒起作用,而且我這默認(rèn)是0,- -
//pageNumber:1,
//每頁(yè)的記錄行數(shù)(*)
pageSize: 10,
//可供選擇的每頁(yè)的行數(shù)(*)
pageList: [10, 25, 50, 100],
//這個(gè)接口需要處理bootstrap table傳遞的固定參數(shù),并返回特定格式的json數(shù)據(jù)
url: "${contextPath}/mapper/getTableData",
//默認(rèn)值為 'limit',傳給服務(wù)端的參數(shù)為:limit, offset, search, sort, order Else
//queryParamsType:'',
////查詢參數(shù),每次調(diào)用是會(huì)帶上這個(gè)參數(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
};
},
//分頁(yè)方式:client客戶端分頁(yè),server服務(wù)端分頁(yè)(*)
sidePagination: "server",
//是否顯示搜索
search: false,
//Enable the strict search.
strictSearch: true,
//Indicate which field is an identity field.
idField : "id",
columns: [],
pagination:true
});
每次添加一個(gè)頁(yè)面如果都要添加以上的配置信息也顯得繁瑣,不過(guò)bootstrap-table.js里面有個(gè)默認(rèn)的配置,只需要修改里面的幾個(gè)配置。
contentType: 'application/json',//post請(qǐng)求頭 application/x-www-form-urlencoded; charset=UTF-8' dataType: 'json', sidePagination: 'server', // 改成server
當(dāng)我們點(diǎn)擊表格分頁(yè)頁(yè)碼的時(shí)候,獲取改變每頁(yè)顯示的頁(yè)碼時(shí)候,前端會(huì)自動(dòng)調(diào)用queryParams()方法,我們需要將這些數(shù)據(jù)傳遞給后臺(tái),
function queryParams(params) {
var query={};
query["limit"] = params.limit;//第幾條數(shù)據(jù)開始
query["offset"] = params.offset;//數(shù)據(jù)大小
return query;
}
6 配合上一步前端的分頁(yè),我們就需要使用pagehelp插件了,同樣我們把這個(gè)分頁(yè)的方法放在通用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需要做一點(diǎn)改變,前端傳過(guò)來(lái)的是顯示第幾條數(shù)據(jù),但是startpage方法第一個(gè)參數(shù)是顯示第幾頁(yè)的數(shù)據(jù),所以做一個(gè)轉(zhuǎn)換pageoffset/limit +1,然后在查詢數(shù)據(jù),需要注意的是,一定要將startpage方法方法查詢數(shù)據(jù)語(yǔ)句的前一行,不能空行,或者換行。
附錄:
到此這篇關(guān)于Springboot 整合通用mapper和pagehelper展示分頁(yè)數(shù)據(jù)(附github源碼)的文章就介紹到這了,更多相關(guān)Springboot展示分頁(yè)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot整合pagehelper分頁(yè)功能
- SpringBoot如何集成PageHelper分頁(yè)功能
- SpringBoot項(xiàng)目中分頁(yè)插件PageHelper無(wú)效的問(wèn)題及解決方法
- Springboot整合分頁(yè)插件PageHelper步驟解析
- SpringBoot+Mybatis分頁(yè)插件PageHelper實(shí)現(xiàn)分頁(yè)效果
- springboot?+mybatis?使用PageHelper實(shí)現(xiàn)分頁(yè)并帶條件模糊查詢功能
- SpringBoot整合PageHelper實(shí)現(xiàn)分頁(yè)查詢功能詳解
- 詳解springboot-mysql-pagehelper分頁(yè)插件集成
- SpringBoot使用PageHelper分頁(yè)詳解
- SpringBoot?把PageHelper分頁(yè)信息返回給前端的方法步驟
相關(guān)文章
使用Jitpack發(fā)布開源Java庫(kù)的詳細(xì)流程
這篇文章主要介紹了使用Jitpack發(fā)布開源Java庫(kù)的詳細(xì)流程,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Java中的Valid和Validated的比較內(nèi)容
在本篇文章里小編給大家整理的是關(guān)于Java中的Valid和Validated的比較內(nèi)容,對(duì)此有興趣的朋友們可以學(xué)習(xí)參考下。2021-02-02
SpringBoot 使用@WebMvcTest測(cè)試MVC Web Controller
這篇文章主要介紹了SpringBoot 使用@WebMvcTest測(cè)試MVC Web Controller,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
java代碼獲取jenkins數(shù)據(jù),構(gòu)建歷史等信息方式
這篇文章主要介紹了java代碼獲取jenkins數(shù)據(jù),構(gòu)建歷史等信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Elasticsearch?percolate?查詢示例詳解
這篇文章主要為大家介紹了Elasticsearch?percolate?查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

