ホームページ  >  記事  >  Java  >  SpringMvc+Mybatis+Pagehelper ページングの詳細な説明

SpringMvc+Mybatis+Pagehelper ページングの詳細な説明

高洛峰
高洛峰オリジナル
2017-01-07 10:27:242172ブラウズ

最近、会社はページングを必要とするアラームページ機能を作成する必要があり、多くの情報を確認した結果、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 サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。