S2Dao.NET TOPページへ
S2Dao.NET - S2Pager
S2Dao.NETを使用してページング機能を実現する機能です。S2Daoで検索した結果に対して、開始位置と最大結果件数を指定して
結果の一部のみを取得できます。
S2Pagerを使用するには次の手順に従ってください。
- ページングの方法の選択
- 検索条件の設定方法
ページングの方法を選択します。DBMSごとにページングの方法が異なります。
次の手順を参考にしてAdo.diconの設定を変更してください。
S2Pagerに対して、検索結果を取得する開始位置と最大結果件数を指定するには、次の方法があります。
このDTOは、Seasar.Dao.Pager.IPagerConditionインターフェースを実装する必要があります
(既定クラスとしてSeasar.Dao.Pager.DefaultPagerConditionクラスを用意しています)。
DTOには、S2Pager用のプロパティ(Offset、Limit、Count)とWHERE句に含まる検索条件となるプロパティを保持してください。次のコードはDTOの作成例です。
public class CategoryPagerCondition : DefaultPagerCondition
{
private string _category;
public string Category
{
get { return _category; }
set { _category = value; }
}
}
次にDaoのメソッドを定義します。上記で作成したDTOをパラメータとして受け取るメソッドをDaoに定義します。次のコードはDaoの作成例です。
[Bean(typeof(Employee))]
public interface IEmployeeDao
{
[Query("ORDER BY EMPNO")]
IList GetEmployeesByCategory(CategoryPagerCondition condition);
}
開始位置(Limit)と最大取得数(Offset)をセットしてDaoのメソッドを呼び出します。次のコードはDaoのメソッドの呼び出し例です。
CategoryPagerCondition condition = new CategoryPagerCondition();
condition.Limit = 10;
condition.Offset = 20;
condition.Category = ".NET";
IList employees = _employeeDao.GetEmployees(condition);
DaoのメソッドにSeasar.Dao.Pager.PagerAttribute属性を指定することで、
検索条件DTOの代わりに使用することが可能です。
PagerAttribute属性の引数には、S2Pager用のプロパティ(Limit、Offset、Count)に対応した引数の名前を指定します。
PagerAttribute属性の引数を省略した場合、既定の引数の名前(limit、offset、count)を使用します。
開始位置(limit)と最大取得数(offset)の引数の型は、int型を指定します。
結果件数(count)の引数の型は、int型とoutキーワード(VB.NETの場合、ByRefキーワード)を指定します。
次のコードはPagerAttribute属性の使用例です。
[Bean(typeof(Employee))]
public interface IEmployeeDao
{
[Query("ORDER BY EMPNO")]
[Pager]
IList GetEmployeesPager(int limit, int offset, out int count);
[Query("ORDER BY EMPNO")]
[Pager("l", "o", "c")]
IList GetEmployeesPager2(int l, int o, out int c);
[Query("DEPTNO = /*deptNo*/ ORDER BY EMPNO")]
[Pager]
IList GetEmployeesPager3(int deptNo, int limit, int offset, out int count);
}
開始位置(limit)と最大取得数(offset)をセットしてDaoのメソッドを呼び出します。
呼び出すと結果件数(count)に値がセットされます。
次のコードはDaoのメソッドの呼び出し例です。
int count;
IList employees = _employeeDao.GetEmployeesPager(2, 1, out count);
使用するページングの方法ごとに、Ado.diconを変更する必要があります。
SQL Server 2005のROW_NUMBER()関数を使用する方法です。ROW_NUMBER()関数で使うORDER BY句を必ず指定する必要があります。
この設定を有効にするには、Ado.diconを次の設定に変更してください。
(変更前)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
(変更後)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Dao.Pager.PagerDataReaderFactoryRowNumberWrapper" >
<arg>
<component class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
</arg>
<arg>commandFactory</arg>
</component>
SQL Server 2000およびSQL Server 2005のTOP関数を使用する方法です。
この設定を有効にするには、Ado.diconを次の設定に変更してください。
(変更前)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
(変更後)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Dao.Pager.PagerDataReaderFactoryTopWrapper" >
<arg>
<component class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
</arg>
<arg>commandFactory</arg>
</component>
ORACLEのROWNUMを使用する方法です。
この設定を有効にするには、Ado.diconを次の設定に変更してください。
(変更前)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
(変更後)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Dao.Pager.OraclePagerDataReaderFactoryRowNumberWrapper" >
<arg>
<component class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
</arg>
<arg>commandFactory</arg>
</component>
MySQLおよびPostgresSQLなどでサポートしているLimit/Offset句を使用する方法です。
この設定を有効にするには、Ado.diconを次の設定に変更してください。
(変更前)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
(変更後)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Dao.Pager.PagerDataReaderFactoryLimitOffsetWrapper" >
<arg>
<component class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
</arg>
<arg>commandFactory</arg>
</component>
System.Data.IDataReaderクラスを空読みすることでページングを実現する方法です。
この設定を有効にするには、Ado.diconを次の設定に変更してください。
(変更前)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
(変更後)
<component name="commandFactory"
class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component name="dataReaderFactory"
class="Seasar.Dao.Pager.PagerDataReaderWrapper" >
<arg>
<component class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
</arg>
<arg>commandFactory</arg>
</component>
|