最近、会社はページングを必要とするアラームページ機能を作成する必要があり、多くの情報を確認した結果、PageHelper の方が適していることがわかりました
そこで、PageHelper の使い方についてのチュートリアルを一から書き、その内容も記録しました。忙しい一日の中で行いました
1. まず、PageHelperの依存関係をプロジェクトに追加する必要があります
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency>
2. mybatis設定ファイルにpagehelperの設定を追加します
<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>
。 3. ページング情報を格納する PageBean クラスを追加します
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; } }
以下にビジネス ロジック コードを記述します
4. まず、mapper.xml ファイルから開始し、データベースの SQL を操作し、必要なデータを見つけます。
<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>
5. Mapperのインターフェースメソッド
public List<AlarmParamModel> selectallList(AlarmParamModel model);
6.serviceインターフェースメソッド
Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize);
7.service実装クラス
ここで注意が必要なのはページングのメインロジックです。 pageNum はページ番号を表し、pageSize は各ページに表示される番号を表します。startPag メソッドは最初のページです。orderBy メソッドは特定のフィールドでデータを並べ替えます。ここでは occr_time の降順 (desc) を使用します
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; }
8 . ここでは、合計 (合計数) と行 (データ) を含むデータをフロント デスクに送信するために使用される Datagrid クラスを使用していることに注意してください。レイヤーはメソッドを呼び出す前に書きます
ここで注意が必要なのは、offsetとlimitはフロントから送られるページ番号と各ページに表示される番号であり、bootstraptableのoffsetとlimitとは異なります。オフセット。つまり、各ページ データに 10 個の項目が表示される場合、ブートストラップの 2 番目のページで表されるオフセットは 10 で、最初と 3 番目のページはそれぞれ 0 と 20 です。ここでのオフセットは 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. これで、フロントエンドリクエストがバックグラウンドデータを取得してページ分割できるようになりました。
@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; }
ここではブートストラップを使用していません。ページングボタンはjqを使って私が書いたボタン群です。次の記事でボタンのコードを投稿します。カスタマイズ度が高くなります。ブートストラップ可能なサブバンドのページングボタンを直接使用して設定することもできます。ただ変更してください。
上記は、編集者が紹介した SpringMvc+Mybatis+Pagehelper ページングの詳細な説明です。ご質問があれば、メッセージを残してください。編集者がすぐに返信します。 。また、PHP 中国語 Web サイトをサポートしていただきありがとうございます。 SpringMvc+Mybatis+Pagehelper ページング関連記事の詳細については、PHP 中国語 Web サイトに注目してください。