没有合适的资源?快使用搜索试试~ 我知道了~
一、开篇 距离上篇《StepbyStep-构建自己的ORM系列-开篇》的时间间隔的太久了,很对不住大家啊,主要是因为有几个系列必须提前先写完,才能继续这个系列,当然我也在 写这几个系列的过程中,对ORM这个系列中的原来的实现的想法有了新的认识和改进,当然这些都不是说是很先进的思想或者认识,也可能是大家见过的思路吧,希望后面我能在 写设计模式系列的过程中,穿插讲解ORM系列,当然我的这个构建的系列,也只能说是很简易的,自己平时开发个小应用工具或者什么的,可能用他,因为是自己开发的嘛,毕竟使用起来还是比较顺手的!符合自己的操作习惯嘛。当然我写这个系列的过程中,也会有自己认识偏激的地方,或者思
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/15399787/bg1.jpg)
StepbyStep-构建自己的构建自己的ORM系列系列-数据访问层数据访问层
一、开篇
距离上篇《Step by Step-构建自己的ORM系列-开篇》的时间间隔的太久了,很对不住大家啊,主要是因为有几个系列必
须提前先写完,才能继续这个系列,当然我也在
写这几个系列的过程中,对ORM这个系列中的原来的实现的想法有了新的认识和改进,当然这些都不是说是很先进的思想或
者认识,也可能是大家见过的思路吧,希望后面我能在
写设计模式系列的过程中,穿插讲解ORM系列,当然我的这个构建的系列,也只能说是很简易的,自己平时开发个小应用工
具或者什么的,可能用他,因为是自己开发的嘛,毕竟使用起来还是比较顺手的!符合自己的操作习惯嘛。 当然我写这个系
列的过程中,也会有自己认识偏激的地方,或者思路不正确的地方,还请大伙多多指出和批评。我也是在我目前的项目中学习
到了很多的宝贵的经验,其实我们应该能看到ORM给我们提供的方便和不便之处,我们取其精华,剔除糟粕,不过这真的很
难。我其实对一些流行的ORM的底层实现,研究的不多也不深,像Nhibernate,我只是了解Hibernate,是当时从JAVA中了解
过来的,不深入,Castle框架倒是用过一段时间,EntityFreamWork,我也没有用过,只是象征性的下载最新版本,体验了下
AOP的方式,我感觉其实有很多的时候,我们使用AOP的方式,能够改进我们程序的灵活性。这块可能还需要大牛们多多指
点。 我理想的ORM是实现持久化的透明,这个怎么理解呢?就是说我在程序的开发中,我不想在业务代码中书写相应的持久
化操作,也不关心业务层中的去如何调用你的 ORM,去完成CRUD的操作。我只关心我的业务逻辑,这个有点像DDD(领域驱
动开发)里面的领域层了,只关心领域内部的业务逻辑,而不关心其他的东西,这样方便我们快速的抓住关注的东西,而尽量
让与领域无关的东西不要影响业务领域逻辑的实现。
二、摘要二、摘要
本篇主要开始讲述《Step by Step-构建自己的ORM系列-数据访问层》关于数据访问层的部分,其实前面也对这块的内容
有了一定的介绍了,其实本篇就是教你如何完成 ORM中的数据访问层的操作,这里是提供统一的数据访问方法的实现。当然
这里的操作还是主要集中在数据库的操作,包括如何根据实体对象返回实体的列表,包括生成SQL语 句的几类实现,还包括
一些实现后续的ORM的配置管理的维护,这里就是提供可视化的XML文件的配置,这个具体怎么来做呢?因为我们平时针对
ORM的使用,都是直接修改XML文件,我们可以提供一个可视化的界面,让那个用户配置这些相应的设置。通过这些配置,
我们可以实现数据库的平滑的迁移,缓存应用的配置,包括其他的一些相关设置信息。总体来说这些操作都可以依托于,我们
这里的数据访问层来完成。
我们来看看ORM中数据访问层的重要作用和地位吧:
上图我们知道,我们所有的相关功能的基础,都是基于数据访问层来做的,所以我们处理好这个层的相关逻辑后,后续的问
题就会比较容易开展。下面我们就会针对这些疑问开始一个个的解决我们的数据访问层应该提供的相关功能!大体的功能应该
有如下功能:
1、持久化的操作方法CUD。可以扩展提供创建表+其他的修改表等相关的自动脚本工具。提供持久化透明的方式。
2、提供缓存服务,将对象的相应映射信息缓存起来,这样后续执行生成语句等操作,效率上会是很大的提升。
3、我们在处理对象对于Update语句,应该能处理好只能更变化的信息,如果没有发生变化,那么我们是不是不用执行更新
操作了呢?减少数据库的操作次数。
4、提供基础的查询方法,以后所有的基于ORM上的查询基于这个查询进行扩展。提供持久化透明的查询方式。
5、并发和事务的控制。我们这里可能提供一个内部的版本号的方式来做,一旦修改过这个对象或者发生改变,任何时候的
![](https://csdnimg.cn/release/download_crawler_static/15399787/bg2.jpg)
操作,我们都是针对这个版本号的记录来做的,版本号
通过内部提供的方法来进行。
三、本文大纲三、本文大纲
1、开篇。
2、摘要。
3、本文大纲。
4、ORM之数据访问层分析。
5、ORM相关代码实现。
6、本章总结。
7、系列进度。
8、下篇预告。
四、四、ORM之数据访问层分析之数据访问层分析
我们先来针对上面的几个问题,我们给出实现思路,来分析下给出的思路的可行性和如何实现的解析。具体的代码下节给
出核心实现方案。
4.1、提供通用的持久化的操作
这个具体的解析在上篇中已经给出了相应的思路了,我们通过在底层提供相应的方法来做。一般来说,对应数据库的四种
操作,我们在数据访问层,也提供了相应的语句的 自动构造的过程,具体的构造,我们前面给出的实现方案是通过特性来实
现,特性中定义具体的数据库字段,类型,长度等一些列的参数。我这里就不复述了,我这里分析下我们 这样实现的好处。
我们知道继承的方式是挺好的,我为什么这么说,通过提供一个基类,基类中定义通用的CUD的操作方法,这样只要是继承
这个类的子类,都会有CUD的操作方法了,但是我们为了提供持久化透明的方案,那么无疑,对于持久化的操作,我们就不
希望由业务逻辑层中的业务逻辑对象来完成,那么如何来做呢?我们通过数据访问层,提供统一的操作方法,让服务层来完成
业务对象的持久化操作。这样就能实现,持久化透明的方案。
所以我们可以这样来做,在数据访问层中,我们提供一个接口,接口中定义持久化操作的几类方案,通过不同的实现配置,
我们可以在XML配置文件中进行指定,我们采用 重量级的ORM还是轻量级的ORM,这样我们也理想的实现了低耦合的特性。
同时,对于不同的文件的操作,我们可以支持多文件类型的写入,当然对于不同的数据库存储,如果我们利用关系型数据库我
们需要ORM,对于对象数据库的操作,或者
XML文件的操作,我们这时候的ORM就变了。
4.2、提供缓存服务
我们知道,我们第一篇中主要是通过自定义特性+反射的形式来处理:我们并没有提供完整的特性操作,其实还有很多的情
况,比如说,我们还可以提供对视图的映射,提供一个视图的特性等。还有其他的特性有很多,后续会给出完整的代码结构,
我们知道自定义特性+反射,如果每次在将对象映射成数据库表的时候,那么效率上是多么的低下啊,那么这个时候,我们可
以考虑使用缓存的方式,将数据库表中的数据库列与对象中的属性列进行映射,我们可以把这些对应关系放在缓存中,那么如
果我们在后续的处理中遇到与数据库相关操作,需要进行对象映射的时候,我们都先会去缓存中查找有没有指定键值的映射数
据库表列存在,存在取出生成SQL语句,否则通过反射取出对应的数据库表列,放在缓存中。下面给出示意图。将这个过程进
行描述:
剩余8页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38638596
- 粉丝: 3
- 资源: 984
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- kernel-4.18.0-425.3.1.el8.x86-64.rpm
- 数据库原理实验报告 - 实验六 分组统计查询和集合查询设计.doc
- 3585-VB一款2个N+P-Channel沟道SOT23-6的MOSFET晶体管参数介绍与应用说明
- 260_raw.mp4.MP4
- JDK-API-1.6.CHM
- 350N06L-TO252-VB一款N-Channel沟道TO252的MOSFET晶体管参数介绍与应用说明
- “时事聚焦”(基于Vue和Node.js实现的新闻网站项目)
- 数据库原理实验报告 - 实验五 嵌套子查询设计实验.doc
- Students' Information Management System.exe
- 3434-VB一款N-Channel沟道SOT23-6的MOSFET晶体管参数介绍与应用说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)