iBATIS的net版本现在是iBATIS.Net-V0.9iBATIS.Net-V0.9beta
http://sourceforge.net/projects/ibatisnet
iBATIS和其他的ORMapping的工具相比有点奇怪,可以说是一个sqlmap,所以在Why use iBATIS SQL Maps? 中有一条理由是
You already know SQL, why waste time learning something else?
iBATIS的cache模式可以灵活的配置
<cacheModel name="account-cache" implementation="LRU" >
<flushInterval hours="24"/>
<flushOnExecute statement="UpdateAccountViaInlineParameters"/>
<flushOnExecute statement="UpdateAccountViaParameterMap"/>
<property name="CacheSize" value="50"/>
</cacheModel>
(UpdateAccountViaInlineParameters和UpdateAccountViaParameterMap表示两个对数据库的访问动作)
sql语句有三种基本形式
存储过程
<procedure name="InsertAccountViaStoreProcedure" parameterMap="insert-params">
sp_InsertAccount
</procedure>
命名的参数
<insert name="InsertAccountViaInlineParameters" parameterClass="Account" >
insert into Accounts
(Account_ID, Account_FirstName, Account_LastName, Account_Email)
values
(#Id#, #FirstName#, #LastName#, #EmailAddress:VarChar:no_email@provided.com#
)
</insert>
未命名的参数
<statement name="InsertOrderViaParameterMap" parameterMap="insert-params" >
insert into Orders
(Order_ID, Account_ID, Order_Date, Order_CardExpiry, Order_CardType,
Order_CardNumber, Order_Street, Order_City, Order_Province, Order_PostalCode )
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
/statement>
参数的映射关系通过parameterMap来定义
<parameterMap name="insert-params">
<parameter property="Id" />
<parameter property="FirstName" />
<parameter property="LastName" />
<parameter property="EmailAddress" nullValue="no_email@provided.com"/>
</parameterMap>
返回的结果通过<resultMap来定义
<resultMap name="order-joined-favourite" class="Order">
<result property="Id" column="Order_ID"/>
<result property="Date" column="Order_Date"/>
<result property="CardExpiry" column="Order_CardExpiry"/>
<result property="CardType" column="Order_CardType"/>
<result property="CardNumber" column="Order_CardNumber"/>
<result property="Street" column="Order_Street"/>
<result property="City" column="Order_City"/>
<result property="Province" column="Order_Province"/>
<result property="PostalCode" column="Order_PostalCode"/>
<result property="FavouriteLineItem" resultMapping="LineItem.LineItem" />
</resultMap>
不过现在还不清楚返回"Hashtable"是指什么
<resultMap name="lite-order-map-result" class="Hashtable">
<result property="Id" column="Order_ID"/>
<result property="Date" column="Order_Date"/>
<result property="CardExpiry" column="Order_CardExpiry"/>
<result property="CardType" column="Order_CardType"/>
<result property="CardNumber" column="Order_CardNumber"/>
<result property="Street" column="Order_Street"/>
<result property="City" column="Order_City"/>
<result property="Province" column="Order_Province"/>
<result property="PostalCode" column="Order_PostalCode"/>
</resultMap>
有一些组合查询的结果
<asp:BoundColumn DataField="Account_Name" HeaderText="Name">
<asp:BoundColumn DataField="Account_Email" HeaderText="Email">
为了消除对数据库的直接依赖,DataField="Account_Name" 这样的写法是不合适的,还没发现iBATIS用哪种方式做map的。
另外,
我们原先采用强类型的方式调用procedure,这样的话开发人员在定义变量后加一个.就可以知道需要传递那些参数,
比如,
sp_InsertAccount proc= new sp_InsertAccount();
proc.Name ="";
proc.Email ="";
DBHelper.ExecuteSql(proc)
但是改成依赖NameValue集合甚至位置来传递参数,不知道会不会有问题
打印 | 张贴于 2004-08-26 15:10:00 | Tag:Dot Net

留言反馈