这里我们按照ibatis.net提供的相关的方法来介绍其拥有的查询方式,后续会对其进行分类归纳总结
在iBatis.net中有一个ISqlMapper接口,它是和外界交流的核心接口,下面是该接口下设计的属性和方法
(可以放大查看该图片)
可以看到里面有很多重载的方法,这些方法是实际使用中需要重点关注的,掌握和熟悉这些方法,可以帮助开发人员高效实现业务,避免再造轮子。
- QueryForObject
其用法及签名如下所示
Executes a Sql SELECT statement that returns that returns data to populate a single object instance.
The parameter object is generally used to supply the input data for the WHERE clause parameter(s) of the SELECT statement.
Overload List
Executes a Sql SELECT statement that returns that returns data to populate a single object instance. The parameter object is generally used to supply the input data for the WHERE clause parameter(s) of the SELECT statement.
object QueryForObject(String,Object);
Executes a Sql SELECT statement that returns a single object of the type of the resultObject parameter.
object QueryForObject(String,Object,Object);
Executes a Sql SELECT statement that returns that returns data to populate a single object instance. The parameter object is generally used to supply the input data for the WHERE clause parameter(s) of the SELECT statement.
T QueryForObject<T>(String,Object);
Executes a Sql SELECT statement that returns a single object of the type of the resultObject parameter.
T QueryForObject<T>(String,Object,ISqlMapper.T);
QueryForQbject通俗说其作用是将数据库中的一条记录以特定的方式呈现,相当于其它框架中的GetModel(string id)等方法。建议使用generic版本。
下面举两个例子
例子1
代码:
SqlMap.QueryForObject<Account>("Account.SelectOne", id)
在ibatis.net的配置文件中,由于启用了useStatementNamespaces设置为true,因此在上面的Account.SelectOne需要带上命名空间,命名空间的名字对应Account.xml中第一行namespace中的名称,此处为Account
Account.xml映射文件片段
<sqlMap namespace="Account" xmlns="http://ibatis.apache.org/mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<alias>
<typeAlias alias="Account" type="theone.domain.Account,theone.domain" />
</alias>
…
<select id="SelectOne" parameterClass="string" resultClass="Account">
select * from Accounts where Id=#Id#
</select>
在resultClass="Account"中,Account是设置的别名,简化缩写
例子2
代码
public Hashtable FindAllOrderById5()
{
return SqlMap.QueryForObject<Hashtable>("Account.select-all2", null);
}
Account.xml映射文件
<select id="select-all2" resultMap="FindAllResult2">
select * from Accounts order by Id desc
</select>
<resultMap id="FindAllResult2" class="Hashtable">
<result property="Id" column="Id" />
<result property="Item" column="Item" />
<result property="Money" column="Money" />
<result property="Year" column="Year" />
<result property="Month" column="Month" />
<result property="Day" column="Day" />
<result property="FavoritorLevel" column="FavoritorLevel" />
<result property="CreatedOn" column="CreatedOn" />
<result property="ModifiedOn" column="ModifiedOn" />
</resultMap>
这个映射配置使得到的结果的每一条记录都映射成一个Hashtable,这个Hashtable中包含9个Key