2017-02-04 29 views
1

でページネーションを実装することができますが、私の次のDAO implementaion上記のDAO implementaionでどのように私はここに春jdbcTemplate

@Override 
    public List<UserAddress> getAddresses(int pageid,int total) { 

     String sql = "select * FROM user_addresses order by id desc limit "+(pageid-1)+","+total; 
     List<UserAddress> userAddresses = jdbcTemplate.query(sql, new RowMapper<UserAddress>() { 
      @Override 
      public UserSessionLog mapRow(ResultSet rs, int rowNum) throws SQLException { 
       UserAddress userAdd = new UserAddress(); 
       userAdd.setId(rs.getInt("id")); 
       userAdd.setId(rs.getString("city")); 
       return userSession; 
      } 
     }); 
     return userAddresses; 
    } 

ですが、私は限界

@RequestMapping("/userAddresses/{pageid}") 
     public ModelAndView userAddresses(@PathVariable int pageid) { 
     int total=5; 
     if(pageid==1){} 
     else{ 
      pageid=(pageid-1)*total+1; 
     } 
     List<UserAddress> listAddresses = userAddressFacade.getAddresses(pageid,total); 
     return new ModelAndView("userAddresses", "listAddresses", listAddresses); 
    } 

を一覧表示しようとすると、すべてのユーザーのアドレスをリストこれが私の見解の一部であり、私はページネーションの一部をハードコードしている

<table class="table table-condensed"> 
     <thead> 
      <tr> 
       <th>Address1</th> 
       <th>City</th> 
      </tr> 
     </thead> 
     <tbody> 
      <c:if test="${not empty addresses}"> 
       <c:forEach var="address" items="${addresses}"> 
        <tr> 
         <td>${address.address1}</td> 
         <td>${address.city}</td> 
        </tr> 
       </c:forEach> 
      </c:if> 
     </tbody> 
    </table> 

    <br/> 
    <a href="/pro/userAddress/1">1</a> 
    <a href="/pro/userAddress/2">2</a> 
    <a href="/pro/userAddress/3">3</a> 

は、いずれかのアイデアを持っているか、どのように改ページする。私はJavaの初心者です。jdbcTemplate、

答えて

-1

ページネーション用の独自の実装ロジックを作成する必要はありません。 SpringのPagedListHolderを使用すると、ページネーションの目的に適しており、設定が可能です。

実装の例を次に示します。Spring Pagination Example

+2

あなたの提案には少し問題があります。問題は、データベースクエリのページングを実装する方法です。つまり、避けたいのは、データベースから大量のデータをネットワーク経由で取り出し、そのわずかな部分しか使用できないときにメモリに格納しなければならないということです。しかし、あなたのアプローチは、コレクション内のページングをメモリ、より具体的にはリストにすることです。しかし、アイデアは正確にそれらのリストを作成する必要はありません。そして、私がここで何かを逃していない限り、私はこの解決案が暴動的だと思います。 –

+0

オリジナルの質問は「ページネーション」についてです。この目的のためにPagedListHolderが設計されていますか? – Artegon

+0

ある程度までは、はい。しかし、その問題はそれだけではありませんか?これは、JDBCTemplateのページネーションと言います。これは、これがデータベースクエリーのページ区切りであることを意味します。もしあなたのJDBCTemplateが5000レコードを持っているクエリを出すならば、5000レコードをネットワーク上に持ってきて、PageListHolderを使って最初の100を返すだけでメモリに保存してから、それをすべて繰り返すよりもデータベースレベルでページを設定するほうが効率的ですユーザーが2番目のページをリクエストしたときにもう一度、あなたは思いませんか?私たちがそうした場合、膨大な量のリソースが無駄になることは言うまでもありません。 –