知识大全 一次数据访问层的改进之路
Posted 知
篇首语:学习知识要善于思考,思考,再思。我就是靠这个方法成为科学家的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一次数据访问层的改进之路相关的知识,希望对你有一定的参考价值。
随着平民网络时 代的到来 微型数据库必然发挥它独到的作用 Access就是一个不错的选择!
今个 我也用了下Access数据库 麻雀虽小 名堂多啊!
查询 永远是神一样的问题 不停的探索 无止境的接近极限 很明显 如何用最少的代码写出最好的查询?
对 问题是:
如何用最少的代码写出最好的查询?
我的 最好 的定义是:代码最美 效率最合适(能快就快 不能快够用就行) 开发速度最快
这里 以用户登录为例子 先生成相应的实体类(UserLoginInfo cs):
UserLoginInfo cs
下面我们一起来玩数据查询的升级游戏
具体问题 查询出userPass为 这种下三滥的密码的用户
最原始查询
GetList(string userPass)
//中间掉了一句话
foreach(OleDbParameter para in paras)
cmd Parameters Add(para);
总结 在这个阶段 最恶心的就是
一大堆Connection Command的操作
读取reader赋值给list的UserLoginInfo的过程 每个字段 索引的对起来 心烦!
对Connection Command的封装
就是SqlHelper那样的 自己随便搞了个
ACECommonHelper
大概的思想 就是这样 调用代码 我想大家也能想象的到 代码参考下一个步骤 可重用性大了
改进reader填充到list 自动读取
根据反射 读取数据库中的字段 自动给UserLoginInfo相应的字段赋值
说明 由于是代码生成 数据库的字段基本上和生成类的属性一致
从网上下了个类
ACEReaderToMode cs
改进后的查询方法:
GetList(string userPass)
public List<UserLoginInfo> GetList(string userPass)
List<UserLoginInfo> list = null;
List<OleDbParameter> paras = new List<OleDbParameter>();
OleDbParameter para = new OleDbParameter( @userPass OleDbType LongVarWChar);
para Value = userPass;
paras Add(para);
using (OleDbConnection connection = new OleDbConnection(connectionString))
OleDbDataReader reader = AccessHelper ACECommonHelper ExcuteReader(
select * from User_login where userPass=@userPass
conn
paras ToArray());
list = AccessHelper ACEReaderToModel ReaderToList<UserLoginInfo>(reader);
reader Close();
conn Close();
return list;
总结 这时候的读取数据部分的代码已经相对之前干净很多了 但是细想一下 真要你写这样的代码 你觉得哪
个地方 你还是觉得是在不停的重复?对 就是那个参数的位置
特别是参数一多 到处都闻得到是复制的味道 看着也不大清晰 挡住了很多核心的代码
传参 每次都写这样的重复的代码 真的很容易厌倦的 大家都是喜新厌旧的人 再改进一下
改进Parameter的写法
我们能不能在一句话中就能把参数所有的性质 添加进去呢?我看行!
ACEParameterHelper cs
调用的时候 查询方法这样写了:
GetList(string userPass)
现在是不是清爽多了 不管再如何写 主要部分基本上都是不同的
总结 我想这个函数设计数据的方面还是太多了 存在很多conn reader 我们完全可以在此基础上封装一个通
用的方法 只要变化的部分 参数 sql语句和conn连接
业务封装 把底层都包起来 对外返回数据列表即可
GetList(string strSql OleDbConnection conn OleDbParameter[] paras)
此时 这就是一个不错的方法了 给他他想要的 得你你想得的
调用的时候 简明简单
业务逻辑层均是类似调用
参数越多 这个代码就看着越爽
至此 一个返回数据列表的数据访问层的改进就暂告一段落
颇多限制 需要不断的完善 以及继续深入的改进
你现在不用再对每个不同查询或者类似的查询写一大堆差不多的代码了
而为了这个目标我们所做的事情是
不停的牺牲性能 不停的提高效率!
唯一要问的是 你的项目能用不?
如果满足你的要求 为什么不用呢?
发现可能代码显示有问题 完整的代码 留下邮箱 我邮箱发送
好久没有写博客了 想念啊 一定要发在首页 各位不要砸我~!
ps 发现修改后代码显示不了 最后两段代码我补上
代码
/// <summary>
/// 根据sql语句和传入参数 获取结果列表
/// </summary>
/// <typeparam name= T ></typeparam>
/// <param name= strSql ></param>
/// <param name= conn ></param>
/// <param name= paras ></param>
/// <returns></returns>
public static List<T> GetList<T>(string strSql OleDbConnection conn OleDbParameter[] paras)
List<T> list = null;
OleDbDataReader reader = ACECommonHelper ExcuteReader(strSql conn paras);
list = ACEReaderToModel ReaderToList<T>(reader);
reader Close();
reader Dispose();
conn Close();
return list;
代码
OleDbParameter[] paras = new ACEParameterHelper() AddParameter<string>( memoCode memoType)
GetParameters();
List<DataDictItemInfo> list = null;
list = ACEAdvanceHelper GetList<DataDictItemInfo>( select * from Fk_data_dict_item t where mo=@memoType and t parent_id= conn paras);
cha138/Article/program/net/201311/12134相关参考
改进的OracleJpublisher可以将数据库实体映射到Java和Web服务 编写客户端和中间层的Java与JEE应用程序来表示数据库实体如用户定义的SQL对象类型和集合类型时如果你需要
这就需要我们在实际开发过程中将这些数据库访问类再作一次封装经过这样的封装不仅可以达到上述的目标还可以减少操作数据库的步骤减少代码编写量在这个方面微软为我们提供了ApplicationBlock但是可惜
表示层的功能是什么?参考答案:表示层向应用程序和终端处理程序提供一组数据变换服务,进行数据变换主要是由于以下三个理由:数据加密,信息压缩和数据兼容。表示层主要处理系统之间用户信息的浯法侧面,即信息如何
表示层的功能是什么?参考答案:表示层向应用程序和终端处理程序提供一组数据变换服务,进行数据变换主要是由于以下三个理由:数据加密,信息压缩和数据兼容。表示层主要处理系统之间用户信息的浯法侧面,即信息如何
用VB.Net创建三层的数据库程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据
CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据。_____答案:错误解析:CPU只能直接访问内存中的数据,外存中的数据必须调人内存后,才能被访问。故本题判断错误。
用VB.Net创建一个三层的数据库应用程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 概论
概论 本文将介绍如何创建一个三层应用程序并且将介绍如何创建一个WebService服务 ADONET创建Wi
知识大全 软考数据库:SQL Server为何走上虚拟化之路
软考数据库:SQLServer为何走上虚拟化之路?[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 软考数据库:SQL Server为何走上虚拟化之路
软考数据库:SQLServer为何走上虚拟化之路?[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下