如何高效地使用XCodeFactory自动生成的数据层代码(一)
2005-07-02 14:32
1111 查看
自从将XCodeFactory开放给大家以后,有不少朋友email来问如何使用或如何更好的使用自动生成的数据层代码的问题。在此分两期给出一个详细的答复,但愿XCodeFactory能很好地协助大家。
大家可以看到,所有自动生成的数据访问类,都继承自IDBAccesser接口,IDBAccesser接口规范了所有的数据访问操作。IDBAccesser定义于EnterpiseServerBase类库中,其外形如下:
// IDBAccesser 即数据库访问基础接口,IDBAccesser提供了对ADO.NET事务的支持
public interface IDBAccesser :IDBAccesserQuery ,IDBAccesserOrder ,IDBAccesserRelation
{
//property
string ConnectString{get ;}
string DbTableName {get ;}
DataBaseType DataBaseType{get ;}
//others
IDataPaginationManager GetPaginationMgr(string selectStr ,string complexID_Name ,int page_size) ;
}
可以看到IDBAccesser 的几个属性都很容易理解,而GetPaginationMgr方法是什么意思了,它返回的是一个分页管理器,此分页管理器可以实现对selectStr 获取的记录集合进行分页,这个将在后面介绍。
IDBAccesser从另外三个接口继承而来,我们来逐个看看这三个接口。
对数据库表的操作可分为两种类型――查询和命令,而IDBAccesserQuery就是查询接口。
public interface IDBAccesserQuery
{
bool ReviseAObject(string where_str ,object target ) ;//使用数据库内容来更新当前对象
object GetAObject(string where_str) ;//if there is no condition clause ,please input ""
object[] GetObjects(string where_str) ;
DataSet GetDataSet(string select_str) ;
}
public interface IDBAccesserQuery
{
bool ReviseAObject(string where_str ,object target ) ;//使用数据库内容来更新当前对象
object GetAObject(string where_str) ;//if there is no condition clause ,please input ""
object[] GetObjects(string where_str) ;
DataSet GetDataSet(string select_str) ;
}
IDBAccesserOrder对应的是命令接口。public interface IDBAccesserOrder
{
//如果不需要事务,trans以null传入
void Insert(object obj ,IDbTransaction trans) ;
void Update(object obj ,IDbTransaction trans) ;
void Delete(object ID ,IDbTransaction trans) ; //ID一般为int或string类型
void InsertBatch(ArrayList objs ,IDbTransaction trans) ;//批插入
}
需要注意的是IDBAccesserOrder提供了对事物的支持,如果需要在几个命令之间维持一个事物,可以如下这样:
IDBAccesser dbAccesser = ……
ITransactionHelper transHelper = new SQLTransactionHelper(dbAccesser .ConnectString) ;
IDbTransaction trans = transHelper.StartTransaction() ;
try
{
dbAccesser.Insert(obj1 ,trans);
dbAccesser.Update(obj2,trans);
dbAccesser.Insert(obj3,trans);
transHelper.CommitTransaction(trans) ;
}
finally
{
transHelper.RollTransaction(trans) ;
}
ITransactionHelper 定义在EnterpiseServerBase类库中,用于简化事物处理。
可以看到IDBAccesserOrder仅仅提供了对同一数据库内部的事物支持,如果你的事物是跨数据库的,那么你可以使用COM+的事物处理。
还剩下IDBAccesserRelation接口,如果说上面的两个接口提供的是面向对象的操作,那么该接口提供关系型的操作。public interface IDBAccesserRelation
{
//RelationAction
int GetRecordsCount() ;
object ExecuteScalar(string command) ;
IDataReader GetReader(string select_str) ; //IDataReader用完后要及时关闭
}要注意的是GetReader方法,使用完该方法的返回的IDataReader后,要记得将其关闭。
在本文最后说一下分页管理器IDataPaginationManager(同样定义在EnterpiseServerBase类库中),当表中符合条件的数据记录很多时,用Apdater一次读出所有的数据即耗费时间又浪费内存,这时用分页是最好的时机。我们看看其接口就知道怎么使用它了。
public interface IDataPaginationManager
{
//complexIDName 如"ID"或"sta.ID"(用于复合查询)
//selectStr 中不允许包括Group By 和 Order By 等字段
//void Initialize(IDBAccesser accesser ,string selectStr ,string complexID_Name) ;
public interface IDataPaginationManager
{
//complexIDName 如"ID"或"sta.ID"(用于复合查询)
//selectStr 中不允许包括Group By 和 Order By 等字段
//void Initialize(IDBAccesser accesser ,string selectStr ,string complexID_Name) ;
int PageCount {get ;}
int CurrentPageIndex{get ;}
DataTable StartPage() ;
DataTable NextPage() ;
DataTable PrePage() ;
DataTable CurrentPage {get ;}
DataTable GetPage(int index) ;
int PageCount {get ;}
int CurrentPageIndex{get ;}
DataTable StartPage() ;
DataTable NextPage() ;
DataTable PrePage() ;
DataTable CurrentPage {get ;}
DataTable GetPage(int index) ;
event PageChanged CurrentPageIndexChanged ;
}
event PageChanged CurrentPageIndexChanged ;
}
注意,分页返回的是DataTable,你可以将返回的DataTable绑定到你的DataGrid直接显示分页的数据。
今天就先写到这里,在后面一篇文章中,我们将讨论更高级的用法,比如,如何缓存经常使用的数据?如何切换不同类型的数据库类型等等。
大家可以看到,所有自动生成的数据访问类,都继承自IDBAccesser接口,IDBAccesser接口规范了所有的数据访问操作。IDBAccesser定义于EnterpiseServerBase类库中,其外形如下:
// IDBAccesser 即数据库访问基础接口,IDBAccesser提供了对ADO.NET事务的支持
public interface IDBAccesser :IDBAccesserQuery ,IDBAccesserOrder ,IDBAccesserRelation
{
//property
string ConnectString{get ;}
string DbTableName {get ;}
DataBaseType DataBaseType{get ;}
//others
IDataPaginationManager GetPaginationMgr(string selectStr ,string complexID_Name ,int page_size) ;
}
可以看到IDBAccesser 的几个属性都很容易理解,而GetPaginationMgr方法是什么意思了,它返回的是一个分页管理器,此分页管理器可以实现对selectStr 获取的记录集合进行分页,这个将在后面介绍。
IDBAccesser从另外三个接口继承而来,我们来逐个看看这三个接口。
对数据库表的操作可分为两种类型――查询和命令,而IDBAccesserQuery就是查询接口。
public interface IDBAccesserQuery
{
bool ReviseAObject(string where_str ,object target ) ;//使用数据库内容来更新当前对象
object GetAObject(string where_str) ;//if there is no condition clause ,please input ""
object[] GetObjects(string where_str) ;
DataSet GetDataSet(string select_str) ;
}
public interface IDBAccesserQuery
{
bool ReviseAObject(string where_str ,object target ) ;//使用数据库内容来更新当前对象
object GetAObject(string where_str) ;//if there is no condition clause ,please input ""
object[] GetObjects(string where_str) ;
DataSet GetDataSet(string select_str) ;
}
IDBAccesserOrder对应的是命令接口。public interface IDBAccesserOrder
{
//如果不需要事务,trans以null传入
void Insert(object obj ,IDbTransaction trans) ;
void Update(object obj ,IDbTransaction trans) ;
void Delete(object ID ,IDbTransaction trans) ; //ID一般为int或string类型
void InsertBatch(ArrayList objs ,IDbTransaction trans) ;//批插入
}
需要注意的是IDBAccesserOrder提供了对事物的支持,如果需要在几个命令之间维持一个事物,可以如下这样:
IDBAccesser dbAccesser = ……
ITransactionHelper transHelper = new SQLTransactionHelper(dbAccesser .ConnectString) ;
IDbTransaction trans = transHelper.StartTransaction() ;
try
{
dbAccesser.Insert(obj1 ,trans);
dbAccesser.Update(obj2,trans);
dbAccesser.Insert(obj3,trans);
transHelper.CommitTransaction(trans) ;
}
finally
{
transHelper.RollTransaction(trans) ;
}
ITransactionHelper 定义在EnterpiseServerBase类库中,用于简化事物处理。
可以看到IDBAccesserOrder仅仅提供了对同一数据库内部的事物支持,如果你的事物是跨数据库的,那么你可以使用COM+的事物处理。
还剩下IDBAccesserRelation接口,如果说上面的两个接口提供的是面向对象的操作,那么该接口提供关系型的操作。public interface IDBAccesserRelation
{
//RelationAction
int GetRecordsCount() ;
object ExecuteScalar(string command) ;
IDataReader GetReader(string select_str) ; //IDataReader用完后要及时关闭
}要注意的是GetReader方法,使用完该方法的返回的IDataReader后,要记得将其关闭。
在本文最后说一下分页管理器IDataPaginationManager(同样定义在EnterpiseServerBase类库中),当表中符合条件的数据记录很多时,用Apdater一次读出所有的数据即耗费时间又浪费内存,这时用分页是最好的时机。我们看看其接口就知道怎么使用它了。
public interface IDataPaginationManager
{
//complexIDName 如"ID"或"sta.ID"(用于复合查询)
//selectStr 中不允许包括Group By 和 Order By 等字段
//void Initialize(IDBAccesser accesser ,string selectStr ,string complexID_Name) ;
public interface IDataPaginationManager
{
//complexIDName 如"ID"或"sta.ID"(用于复合查询)
//selectStr 中不允许包括Group By 和 Order By 等字段
//void Initialize(IDBAccesser accesser ,string selectStr ,string complexID_Name) ;
int PageCount {get ;}
int CurrentPageIndex{get ;}
DataTable StartPage() ;
DataTable NextPage() ;
DataTable PrePage() ;
DataTable CurrentPage {get ;}
DataTable GetPage(int index) ;
int PageCount {get ;}
int CurrentPageIndex{get ;}
DataTable StartPage() ;
DataTable NextPage() ;
DataTable PrePage() ;
DataTable CurrentPage {get ;}
DataTable GetPage(int index) ;
event PageChanged CurrentPageIndexChanged ;
}
event PageChanged CurrentPageIndexChanged ;
}
注意,分页返回的是DataTable,你可以将返回的DataTable绑定到你的DataGrid直接显示分页的数据。
今天就先写到这里,在后面一篇文章中,我们将讨论更高级的用法,比如,如何缓存经常使用的数据?如何切换不同类型的数据库类型等等。
相关文章推荐
- 如何高效地使用XCodeFactory自动生成的数据层代码(二)
- 如何使用XCodeFactory自动生成XML配置文件和对应的解析类?
- 转载:如何使用XCodeFactory自动生成XML配置文件和对应的解析类
- 如何在Eclipse中使用ibatis的自动代码生成工具Abator
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?
- 通过Spring.net来使用XCodeFactory生成的数据层!
- SpringBoot学习-如何使用mybatis-generator-maven-plugin自动生成代码
- WPF中如何使用代码操作数据模板生成的控件
- WPF中如何使用代码操作数据模板生成的控件
- android开发使用greenDAO如何自动生成代码
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?[转]
- 如何使用java自动生成数据表id,java.util.UUID类
- 使用Maven 插件Mybatis Generator自动生成Mybatis数据映射代码
- 如何使用CodeSmith自动生成C#代码
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- 如何使用《DB 查询分析器》高效地生成旬报货运量数据
- 如何在使用pdfFactory Pro生成PDF时自动创建目录书签
- 如何使用《DB 查询分析器》高效地生成旬报货运量数据
- 学习如何使用Mybatis-generator 自动生成java代码以及Mapper文件