首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

有好手自己写数据库访问层吗?进来讨论下好吗

2011-11-30 
有高手自己写数据库访问层吗?进来讨论下好吗最近都没怎么用JAVA了,一直写C#,原来写JAVA也不常用Hibernate

有高手自己写数据库访问层吗?进来讨论下好吗
最近都没怎么用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
                        {
                               
                                //检查计划是否已经审核


                                string   SQL   =   "SELECT   count(*)   FROM   T_ProducePlan   WHERE   stat   !=   1   AND   collect_id   =   "   +   sale_plan.getId();
                                if   (db.getInt(SQL)   >   0)
                                {
                                        //计划已经审核,无法取消
                                        db.Release();
                                        return   0;
                                }

                                db.beginTrans();

                                //删除相关计划
                                T_ProducePlan   produce_plan   =   new   T_ProducePlan();
                                produce_plan.setCondtion(new   Condtion( "   and   collect_id   =   "   +   sale_plan.getId()));
                               
                                this.Remove(produce_plan,   db);

                                WriteLog(Config.BaseInfo.getInstance().LogString_Remove,   "[删除生产计划]   删除所有汇总ID是“ "   +   sale_plan.getId()   +   "”生产计划 ");
                               
                                //将原销售计划汇总更新状态成“未分配”
                                SalePlan.SalePlanManager   spm   =   new   SalePlan.SalePlanManager(db);
                                SalePlan.v_SalePlan_Collect   pln   =   new   SalePlan.v_SalePlan_Collect();
                                pln.setStat( "1 ");
                                pln.setCondtion(new   CSDN.DBQuery.Condtion( "   and   id   =   "   +   sale_plan.getId()));
                                spm.modifyCollectSalePlan(pln,   db);



                                WriteLog(Config.BaseInfo.getInstance().LogString_Modify,   "[修改市场需求汇总]   修改ID是 "   +   sale_plan.getId()   +   "的市场需求汇总,其状态更改为“未分配” ");

                                db.commit();

                                db.Release();

                                return   1;
                        }
                        catch   (Exception   ex)
                        {
                                if   (db.getTransStates()   ==   1)
                                {
                                        db.rollback();
                                }
                                Utils.LogWriter.Error( "取消一个销售计划汇总所分配的生产计划时出错: "   +   ex.Message);
                                return   -1;
                        }

                }

-------------------------------------
想请高手给我指点一下,这个组件在设计结构上都有哪些缺陷,我应该怎么要改进它。

只管说,我知道和Hibernate比,它一无是处


[解决办法]
IDBEngine

这个类里面的方法差不多比较齐全了
c#我就不会玩了
[解决办法]

给大家介绍个技术群

大家一起学习,一起提高

21189212
[解决办法]
相对来说,通用性更重要些。
[解决办法]
C#的怎么发到这来了?
.net里不是有DataSet吗?
使用强类型的数据集,相当于数据持久层。
[解决办法]
hibernate有个。net版的
[解决办法]
spring的jdbctemplate
.net也应该有的
[解决办法]
c#不懂,JF
[解决办法]
C#不是有NHibernate么

热点排行