読者です 読者をやめる 読者になる 読者になる

かとじゅんの技術日誌

技術の話をするところ

S2PagerでもSQLの指定が可能

Seasar S2Dao

検索エンジンなどで扱う大量な結果の表示には,ページングという手法がよく使われます.これを簡単にできるようにしたのが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);

とすると,取得できます.
非常に簡単に実現できることを確認していただけたと思います.