[Spring.Net]AdoTemplate回傳IList<T>

[Spring.Net]AdoTemplate回傳IList<T>

Memo

之前一直以為Spring.Net在執行AdoTemplate的Method,只有支援IList,而沒支援Generic,
還以為是不是因為Spring.Net歷史悠久,那個時代ASP.NET還沒有泛型這種東西。

後來才知道是自己太不用功了,其實是掛在另一個namespace底下,
就跟IList是在System.Collection底下,而IList<T>是在System.Collection.Generic底下一樣。

原本使用的AdoTemplate,其實是Spring.Data.Core.AdoTemplate,所有Method回傳型態則是IList。
要支援泛型,則是要使用Spring.Data.Generic.AdoTemplate。
我們來看一下有哪邊需要修改的。

Play it

首先Spring的設定檔,原本adoTemplate的namespace要改,也就是改object的type。


        <property name="DbProvider" ref="MyDbProvider"/>
        <property name="DataReaderWrapperType" value="Spring.Data.Support.NullMappingDataReader, Spring.Data"/>
    </object>
  • 如果有設計BaseDao當作SuperClass的話,記得BaseDao的繼承也要改一下。

{
}

接著是原本使用AdoTemplate的method,要加上<T>的型別。

  • 回傳單一domain object:

  • 回傳IList<T>:

  • 在使用Generic.AdoTemplate後,如何使用原本的AdoTermplate呢?只需要用AdoTemplate.ClassicAdoTemplate即可。

最後,RowMapper的部分也要修改一下,原本實作IRowMapper,要改成IRowMapper<T>


{
        ColumnSort IRowMapper<ColumnSort>.MapRow(IDataReader reader, int rowNum)
        {}
}

結論

現在開發的系統蠻多都是使用.net framework 3.5以上了,泛型在Linq的使用上以及效率上,還是有一定的好處,
在這邊memo一下,也順便提供給大家作參考。


blog 與課程更新內容,請前往新站位置:http://tdd.best/