最近都没怎么用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、没有cache3、没有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比,它一无是处
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、没有cache3、没有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比,它一无是处
c#我就不会玩了
.net里不是有DataSet吗?
使用强类型的数据集,相当于数据持久层。
.net也应该有的