Heim >Java >javaLernprogramm >Detaillierte Erklärung zum Paging von SpringMvc + Mybatis + Pagehelper
Vor kurzem musste das Unternehmen eine Alarmseitenfunktion erstellen, die Paging erfordert. Nachdem ich viele Informationen überprüft hatte, stellte ich fest, dass PageHelper besser geeignet ist
Also habe ich ein Tutorial zur Verwendung von PageHelper von Grund auf geschrieben. und habe auch aufgezeichnet, was ich während des arbeitsreichen Tages getan habe. Zuerst müssen Sie die Abhängigkeit von PageHelper zum Projekt hinzufügen. Fügen Sie die Konfiguration von pagehelper in der Konfigurationsdatei von mybatis hinzu
3. Fügen Sie eine PageBean-Klasse zum Speichern von Paging-Informationen hinzu<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency>Das Folgende ist der Geschäftslogikcode
<configuration> <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 4.0.0以后版本可以不设置该参数 --> <property name="dialect" value="mysql"/> <!-- 该参数默认为false --> <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 --> <!-- 和startPage中的pageNum效果一样--> <property name="offsetAsPageNum" value="true"/> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true"/> <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 --> <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)--> <property name="pageSizeZero" value="true"/> <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 --> <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 --> <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 --> <property name="reasonable" value="true"/> <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 --> <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 --> <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 --> <!-- 不理解该含义的前提下,不要随便复制该配置 --> <!-- <property name="params" value="pageNum=start;pageSize=limit;"/> --> <!-- 支持通过Mapper接口参数来传递分页参数 --> <property name="supportMethodsArguments" value="true"/> <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page --> <property name="returnPageInfo" value="check"/> </plugin> </plugins> </configuration>
4. Beginnen Sie zunächst mit der Mapper.xml-Datei. Betreiben Sie die SQL der Datenbank und ermitteln Sie die benötigten Daten
public class PageBean<T> implements Serializable { private static final long serialVersionUID = 1L; private long total; //总记录数 private List<T> list; //结果集 private int pageNum; //第几页 private int pageSize; //每页记录数 private int pages; // 总页数 private int size; //当前页的数量<=pageSize public PageBean(List<T> list){ if (list instanceof Page){ Page<T> page = (Page<T>) list; this.pageNum = page.getPageNum(); this.pageSize = page.getPageSize(); this.total = page.getTotal(); this.pages = page.getPages(); this.list = page; this.size = page.size(); } } public long getTotal() { return total; } public void setTotal(long total) { this.total = total; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } }
5 🎜>
6. Die Schnittstellenmethode des Dienstes<select id="selectallList" parameterType="com.alarm.bean.AlarmParamModel" resultMap="AlarmMap"> select message_id, seqnum, message_type, process_status, distribute_status, processor, occur_time, close_time, system_id, group_id, warn_level, message_content from td_alarm_info </select>
public List<AlarmParamModel> selectallList(AlarmParamModel model);
7. Die Implementierungsklasse des Dienstes
Was hier beachtet werden muss, ist die Hauptlogik des Pagings. pageNum stellt die Seitenzahl dar, pageSize stellt die auf jeder Seite angezeigte Zahl dar, die startPag-Methode ist die erste Seite, die orderBy-Methode dient zum Sortieren der Daten nach einem bestimmten Feld, hier verwende ich die absteigende Reihenfolge (desc) von occr_time
Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize);
8. Beachten Sie, dass ich hier eine Datagrid-Klasse verwende, die zur Übertragung von Daten an die Rezeption verwendet wird, einschließlich Gesamt (Gesamtzahl) und Zeilen (Daten). )
public Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize){ PageHelper.startPage(pageNum, pageSize); PageHelper.orderBy("occur_time desc"); List<AlarmParamModel> list = this.alarmMgrMapper.selectallList(model); PageInfo<AlarmParamModel> pageInfo = new PageInfo<AlarmParamModel>(list); Datagrid datagrid = new Datagrid(pageInfo.getTotal(),pageInfo.getList()); return datagrid; }
9. Beginnen Sie mit dem Schreiben der Controller-Ebene und rufen Sie die zuvor geschriebene Methode auf
Was hier beachtet werden muss, ist dieser Offset und Limit werden von der Rezeption übergeben. Die Seitenzahl und die auf jeder Seite angezeigte Nummer unterscheiden sich vom Offset und Limit von Bootstraptable. Der Offset stellt den Offset dar, das heißt, wenn auf jeder Seite 10 Daten angezeigt werden Der durch die zweite Seite im Bootstrap dargestellte Offset beträgt 10, und die erste Seite und die dritte Seite sind 0 bzw. 20. Und der Offset bezieht sich hier auf die pageNum.
public class Datagrid { private long total; private List rows = new ArrayList<>(); public Datagrid() { super(); } public Datagrid(long total, List rows) { super(); this.total = total; this.rows = rows; } public long getTotal() { return total; } public void setTotal(long total) { this.total = total; } public List getRows() { return rows; } public void setRows(List rows) { this.rows = rows; } }
10. Jetzt kann die Front-End-Anfrage die Hintergrunddaten abrufen und sie paginieren .
@RequestMapping(value = "/AlarmInfo/list", method = {RequestMethod.GET,RequestMethod.POST}) @ResponseBody public Datagrid alarmInfo(AlarmParamModel model,@RequestParam(value="offset",defaultValue="0",required=false)Integer pageNum, @RequestParam(value="limit",defaultValue="10",required=false)Integer pageSize) { Datagrid datagrid = this.alarmMgrService.selectallList(model,pageNum, pageSize); return datagrid; }
Hier habe ich die mit Bootstrap gelieferten Paging-Schaltflächen nicht selbst geschrieben, ich werde die Schaltflächen hinzufügen Der nächste Artikel Veröffentlichen Sie den Code, damit der Grad der Anpassung höher ist ~ Sie können die Konfiguration auch direkt über die Paging-Schaltfläche des bootfähigen Unterbands ändern.
Das Obige ist die detaillierte Erklärung des Herausgebers von SpringMvc+Mybatis+Pagehelper. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht Ich werde Ihnen rechtzeitig antworten. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der chinesischen PHP-Website bedanken!$('#tb_departments').bootstrapTable({ url: 'http://10.1.234.134:8088/api/AlarmInfo/list', //请求后台的URL(*) method: 'get', //请求方式(*) striped: false, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) onlyInfoPagination:true, //设置为 true 只显示总数据数,而不显示分页按钮。需要 pagination='True' sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: oTableInit.queryParams,//传递参数(*) sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) pageNumber:1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 checkboxHeader:true, //add height: 500, //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 uniqueId: "id", //每一行的唯一标识,一般为主键列 showToggle:false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: true, detailFormatter:detailFormatter , paginationHAlign:"left", paginationDetailHAlign:"right",
Weitere Artikel zum Thema SpringMvc+Mybatis+Pagehelper-Paginierung finden Sie auf der chinesischen PHP-Website!