日期:2014-05-20  浏览次数:20596 次

有高手自己写数据库访问层吗?进来讨论下好吗
最近都没怎么用JAVA了,一直写C#,原来写JAVA也不常用Hibernate和spring这类框架,多数都是jsp   +   javabean   或者Ejb了。

写C#时发现C#几乎没有成熟度较高的框架,多数C#的程序员们好像也不太爱考虑系统框架的问题。所以没事儿时,就用C#写了一个免配置的DB访问组件。

基本结构是这样的

----------------------------------------------
public   interface   IDBEngine
{
///   保存数据
int   insert(Object   pojo)   ;

///   更新数据
int   update(Object   pojo);

///   删除数据
int   delete(Object   pojo);


///   提取结果集
ArrayList   select(Object   pojo);

///   提取结果集到DataTable
DataTable   selectIntoDataTable(Object   pojo);

///   提取结果集
ArrayList   select(Object   pojo,   Pagination   pagination);

///   提取连接  
OleDbConnection   getConnection();

///   打开事务
void   beginTrans();

///   提交
void   commit();

///   回滚
void   rollback();

///   执行单条SQL
void   executeSQL(String   SQL);

///   带返回执行存储过程语句
ArrayList   executeProcedureCall(String   SQL,   Object[]   param,   Object   voclass);

///   不带返回执行存储过程语句
void   executeProcedureCall(String   SQL,   Object[]   param);

int   getInt(string   SQL);

int   getColumnMaxValue(string   TableName,   string   ColumnName);

DataTable   executeSqlProcedureCall(String   SQL,   object[]   param);

///   执行一条SQL语句,将返回记录集放入POJO并返回POJO列表
ArrayList   SelectFromSQL(string   SQL,   object   pojo);

///   执行一条SQL语句,将返回记录集放入POJO并返回POJO列表,同时分页
ArrayList   SelectFromSQL(string   SQL,   object   pojo,   Pagination   pagination);

///   注销对象
void   Release();

///   得到当前事务状态
int   getTransStates();

///   得到数据库类型
string   getDBType();

///   得到数据库当前时间
string   getDBDateTime();

----------------------------------

所有的实体bean都要与对应的数据库表同名,字段名列名就是加get\set
并且必须要继承以下类
public   class   BasePojo
{

//设置查询条件
public   void   setCondtion(Condtion   c)

//获取查询条件
public   Condtion   getCondtion()


//设置排序
public   void   setOrderBy_DESC(string   FiledName)
public   void   setOrderBy_ASC(string   FiledName)
public   string   getOrderBy()

-----------------------------------

我在写这个之前看了speedframework的结构,也没有太仔细看,糊里糊涂的就写了

这个组件目前我看到的缺点:

1、没有自主的分页功能,要依靠数据库里的一个分页存储过程(我自己也感觉这样比较垃圾,而且我只写了oracle和mssql下的分页存储过程)

2、没有cache

3、没有connection   pool,主要是因为MS的驱动里自带了。

4、实体类完全反映了数据库中的表或视图的结构。

------------------------
以下有我调用时的一些示例

public   int   CancelAssignedSalePlanCollect(SalePlan.v_SalePlan_Collect   sale_plan)
                {
                        Engine   db   =   Engine.getInstance();

                        try
                        {
                               
                                //检查计划是否已经审核