検索エンジンなどで扱う大量な結果の表示には,ページングという手法がよく使われます.これを簡単にできるようにしたのがS2Pagerです.
SMART deploy上でS2Pagerを使う場合は以下のようにすることで可能です.
- Dao, Entityは,SMART deployのパッケージルールとクラス名の命名法に準拠する.
- Conditionは,ルートパッケージ.dtoに,xxxConditionDtoとして配置する.
S2Pagerを使うのと自前でSQLを定義することができないと思いこんでいた(ドキュメントにできると書いてなかったため)のですが,Seasar-users MLでできることを確認.そのカスタマイズ方法も含めて以下に示します.
UserInfo.java
@Bean(table = "USER_INFO") public class UserInfo { private int userId; private String userName; private BigDecimal versionNo; // setter, getter 省略 }
UserInfoDao.java
@S2Dao(bean = UserInfo.class) public interface UserInfoDao { @Arguments("condition") public List<UserInfo> selectByCondition( UserInfoConditionDto userInfoConditionDto); }
UserInfoDao_selectByCondition.sql
SELECT * FROM USER_INFO WHERE USER_NAME LIKE /*condition.userName*/1
UserInfoConditionDto.java
public class UserInfoConditionDto extends DefaultPagerCondition { private static final long serialVersionUID = -2878842548860038057L; private String userName; // setter, getter 省略 }
selectByConditionを呼び出す
UserInfoCondtionDto condition = new UserInfoConditionDto(); condition.setLimit(5); condition.setUserName("%S2Pager%"); List<UserInfo> list = userInfoDao.selectByCondition(condition);
これで,大量の結果も,まずconditionのLimitプロパティで指定した5件だけが取得できます.次の5件を取得したければ
condition.setOffset(condition.getLimit()); list = userInfoDao.selectByCondition(condition);
とすると,取得できます.
非常に簡単に実現できることを確認していただけたと思います.