iBatis.Net(4):DataMapper API

摘要:
在iBatis.Net中,您可以通过SqlMapper实例访问DataMapper API。事实上,我之前写的是iBatis.Net的一些概念和一些配置问题。从这篇文章中,它是真正的本质。这也是我们使用iBatis.NET真正完成数据库任务的开始。本文主要介绍DataMapperAPI的定义、功能和使用。很抱歉,本文中仍然没有实例,因为没有数据实体类和映射文档

在iBatis.Net中,可以通过SqlMapper实例访问DataMapper API,其实以前写的都是一些iBatis.Net的概念和一些配置的问题,从这一篇开始,才是真正的精髓,也是我们使用iBatis.NET真正开始完整我们对数据库的任务的开始,这一篇我主要写一些DataMapper API,的定义、作用、使用方式,很遗憾,这一篇应该还是不会出现任何实例,因为还没有数据实体类和映射文档,这将会在下一篇写到

Insert/Delete/Update
public object Insert(string statementName, object parameterObject);
 
public int Delete(string statementName, object parameterObject);
 
public int Update(string statementName, object parameterObject);

从方法名就可以看的出来他们要执行的操作,如果您没有使用过iBatis,肯定会疑惑为什么没有一个叫做Select的方法,的确,再我第一次接触他的时候,也这么想,不过如果您能完整的看完这一篇的话,就回觉得这个疑惑其实有点蠢啦 ,呵呵,谁没有蠢过呢

参数statementName:在映射文件中定义的节点id属性值(下篇详细写到)

参数parameterObject:输入参数,通常是一个实体类

返回值:在Delete和Update方法中,方法返回受影响的行数,如果在映射文件节点Insert中加入了selectKey,就可以产生主键并返回它

QueryForObject
public object QueryForObject(string statementName, object parameterObject);
public T QueryForObject<T>(string statementName, object parameterObject);
public T QueryForObject<T>(string statementName, object parameterObject, T instanceObject);
public object QueryForObject(string statementName, object parameterObject, object resultObject)

注意啦,Select来啦,这些方法的实质就是Select,如果我们查询的结果是一行数据,并且在映射文件中定义了与查询结果对应的实体类,那么执行此方法返回的就是一个这个实体类的对象,在实际引用中经常会用到组合的查询操作,那么就可以在程序运行中管理返回对象的类型,我们可以把对象作为第三个参数传递到方法中

QueryForList
public IList<T> QueryForList<T>(string statementName, object parameterObject);

public IList QueryForList(string statementName, object parameterObject);

public void QueryForList<T>(string statementName, object parameterObject, IList<T> resultObject);

public void QueryForList(string statementName, object parameterObject, IList resultObject);

public IList<T> QueryForList<T>(string statementName, object parameterObject, int skipResults,int maxResults);

public IList QueryForList(string statementName, object parameterObject, int skipResults, int maxResults);

QueryForObject方法是用来返回一行数据,那么这里的QueryForList就是返回多行结果啦,他返回的是一个实现了IList结构的列表对象,当然也可以是泛型类型的,这样就会省点装箱拆箱的过程啦,参数skipResults,表示从结果行掉过skipResults行后返回,maxResults表示返回的行数(当然,如果结果中根本没超过maxResults行,那么这个参数就失效啦)

QueryWithRowDelegate
public IList<T> QueryWithRowDelegate<T>(string statementName, object parameterObject, RowDelegate<T> rowDelegate);
public IList QueryWithRowDelegate(string statementName, object parameterObject, RowDelegate rowDelegate);
如果我们在我们返回结果集的时候,需要对结果集中的对象进行一些处理,比如类型转换,或者需要过滤到我们定义的某种规则的行,我们就可以使用这个方法,向方法中传递一个RowDelegate委托方法来处理这些事情
 
 
 
QueryForDictionary/QueryForMap
public IDictionary<K, V> QueryForDictionary<K, V>(string statementName, object parameterObject, string keyProperty);

public IDictionary QueryForDictionary(string statementName, object parameterObject, string keyProperty);

public IDictionary<K, V> QueryForDictionary<K, V>(string statementName, object parameterObject, string keyProperty, string valueProperty);

public IDictionary QueryForDictionary(string statementName, object parameterObject, string keyProperty, string valueProperty);

public IDictionary<K, V> QueryForDictionary<K, V>(string statementName, object parameterObject, string keyProperty, string valueProperty, DictionaryRowDelegate<K, V> rowDelegate);

public IDictionary QueryForMap(string statementName, object parameterObject, string keyProperty);

public IDictionary QueryForMap(string statementName, object parameterObject, string keyProperty, string valueProperty);

public IDictionary QueryForMapWithRowDelegate(string statementName, object parameterObject, string keyProperty, string valueProperty, DictionaryRowDelegate rowDelegate);

如果您理解了QueryForList,就不难理解QueryForDictionary,他返回一个实现了IDictionary接口的字典类型,他的key值是由keyProperty指定的,如果我们不需要结果集中存放的是整个对象,而是某一列值,还可以使用valueProperty指定一个值来确定返回结果中的列值

 

Session

在iBatis.Net中,一个会话就是一个Connection和一个Transaction容器,使用一个using语句块打开一个Connection

using(IDalSession mySession=sqlMap.OpenConnection())
{
    //do something
}

Connection
public ISqlMapSession OpenConnection();

public ISqlMapSession OpenConnection(string connectionString);

public void CloseConnection();

可以使用一个Open和一个Close定界一个Connection,或者使用一个using语句块,在这个语句块执行完毕后就会自动调用一个CloseConnection方法

 

Transaction

 

 

public ISqlMapSession BeginTransaction();

public ISqlMapSession BeginTransaction(bool openConnection);

public ISqlMapSession BeginTransaction(IsolationLevel isolationLevel);

public ISqlMapSession BeginTransaction(string connectionString);

public ISqlMapSession BeginTransaction(bool openNewConnection, IsolationLevel isolationLevel);

public ISqlMapSession BeginTransaction(string connectionString, IsolationLevel isolationLevel);

public ISqlMapSession BeginTransaction(string connectionString, bool openNewConnection, IsolationLevel isolationLevel);

public void CommitTransaction();

public void CommitTransaction(bool closeConnection);

public void RollBackTransaction();

public void RollBackTransaction(bool closeConnection);

对数据库的操作,当然少不了对事务的支持啦,当然iBatis.Net也提供给了我们很好的对事务的支持,当然,我们还是可以使用TransactionScope的方式使用事务,这些方法的使用,我觉得就没必要解释了吧,开始,执行,若不成功、抛出异常,则回滚事务,然后进行相应的操作,这就看你要怎么设计啦

免责声明:文章转载自《iBatis.Net(4):DataMapper API》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Django的Settings中Templates的路径设置mysql日期字段分区索引下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

html2javabean

这个有“标题党”之嫌了。名字但是像模像样。关于网页爬虫(就是抓取网页内容)的小工具大家都写过吧。可是一般写这样的东西都是类似完成某个简单的需求而 写的类似脚本语言的东西,一般代码不多,类似黑客程序代码风格。大家应该没有做过大型项目全部以抓取网页内容为数据源吧?我就做过这样的项目,呵呵。如果真是一个多人合作,周期较长,又是一个产品型的项目,需要维护,升级,那...

ibatis DTD 2.0 3.0

ibatis 3.0 DTD New sqlMapConfig.xml DTD: <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> New sqlMap (*.m...

IBatis.Net学习笔记(二)数据库的缓存模式

在IBatis中提供了数据库缓存的模式,可以提高访问效率。对于一些不常更新的表可以直接利用IBatis的缓存方式。要使用IBatis的数据库缓存,只要利用配置文件就可以了,实现起来比较简单:         <select id="GetCachedAccountsViaResultMap"                    resultMa...

报错记录:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

以下是错误信息: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): org.ml.apply.persistence.UserInfoMapper.login at org.apache.ibatis.binding.MapperMeth...

ibatis实现Iterate的使用 (转)

<iterate         property="" /*可选,              从传入的参数集合中使用属性名去获取值,              这个必须是一个List类型,              否则会出现OutofRangeException,              通常是参数使用java.util.Map时才使用,   ...

ibatis 批量插入

  ibatis 批量插入 CreationTime--2018年7月2日10点21分 Author:Marydon 1.说明   基于oracle的sql语句 2.主键id有默认值,比如:sys_guid()   id有默认值的情况下,插入的时候,不再声明该字段,当插入一条数据的时候,oracle会自动生成id。 <insert id="inse...