最近在做一个项目用到了持久化层。学到了些东西,跟大家分享下:
持久化就是把数据保存到可掉电式存储设备中供之后使用。我们每天都在用的oracel就是一个持久化工具。通过它我们将数据持久化到磁盘上。
有了持久化为什么还要持久层呢?
主要是为了解决以下几个问题:
1、如果业务层发生变化,比如需要将客户端程序从C/S迁移到B/S,我们的持久化代码是否要重新编译。
2、如果底层数据持久化机制发上了变化,如从oracle数据库更改成sqlserver或者用于测试的小型数据库mysql,我们的持久化代码是否要重新编译。
从本质上讲持久化进化到持久层的目的就是为了解耦合,实现业务逻辑和数据逻辑的分离。
举个很简单的例子:
我们复制文件,有可能复制到软盘\U盘\甚至是网络上的任意一台电脑的硬盘,如果按照开发人员的思维方式就要写一堆if/else来判断设备类型,如果更完善一点还要考虑并发,同一时间不能向一个设备发数据,调度好线程。但是实际上我们只需要Ctrl+C/Ctrl+V就搞定了,操作系统帮我们做好了一个持久化层。将我们的业务逻辑(拷贝文件)和数据逻辑(传输数据)分离了。
设计得好的持久成可以达到以下目的:
1、数据存储逻辑的分离
业务层代码不会出现数据操作的代码如insert/update/select,只需要编写业务代码如:
Customer c=new Customer();
c.setName("jack");
c.setAge(20);
saveandupdate(c);
使得开发人员可以更好的专业划分,另外测试起来也相对容易
2、更好的性能
成熟的持久化层可以提供数据库连接池\语句cache\数据cache,减少数据库的查询压力。
数据库连接池:每次数据库连接都需要建立socket、验证密码\权限、记录日志、分配cpu内存等等,这是相当耗费资源的。 如果仅仅为了一条查询语句就要建立连接然后释放连接那就太浪费了。数据库连接池就是将暂时不用的连接不进行关闭,保存下了,以备下次直接使用。
语句cache:一般情况下我们认为update语句很快,也就一眨眼的时间,但是这一眨眼的时间数据库为我们做了很多事—— sql语法检查、语义分析、创建执行计划等。大型的系统由成百上千的终端操作数据库,而实际上操作最多的表也就十几个,运行的语句也就几十种。如果将这些语句也缓存起来,性能也能够提高很多。
数据cache:这是最常见的,如果数据库中的数据没有变化那就不用从数据库中select了,直接读内存就好了。减少了网络传输、内存与磁盘数据交换等开销。
说了这么多持久层的功能,大家可能觉得说的这么好,设计开发这个层一定很困难。那是当然了,但是这个不用我们自己从头来搞,这里就引出了ORMaping。先介绍一下ORMaping的理论。
ORMaping就是对象关系映射。ORMaping发展到现在已经出现了很多好的成熟的产品,而且很多都是开源的免费的。采用这些产品可以减少乏味的代码/更加面向对象的设计/更好的性能/更好的移植性。
一般的开发步骤是:
1、编写ORMap配置文件,一般是xml的。这是比较耗时的,但是可以进行迭代开发,一边开发一边修改(建议采用自动测试工具Unit系列,每次修改完成回归测试一下建立信心)。
2、借助工具,根据配置文件生成数据库ddl,以及实体类代码,比如同时生成Customer表和Customer.java源码, 表有字段name,相应的Customer.java有属性name和相应的方法getName()/setName(String)。 对于遗留系统,可以借助工具连接数据库反向生成配置文件和实体类代码,十分方便快捷。
3、编写提供给业务层的方法,其中涉及到事务的处理、异常处理、操作实体类,类似于以前的业务开发,但是 完全不涉及到sql语句(通过配置文件ORMap产品和数据库在底层进行sql交互,对我们来说是透明的),完全的面向对象代码。这步 稍微费点时间但是相对于以前的业务开发便利了太多。
分享到:
相关推荐
private System.Nullable<int> m_SendPerson = null; /// /// 派单人 /// public System.Nullable<int> SendPerson { get{ return m_SendPerson; } set{ m_SendPerson = value;... private System.Nullable...
2. 映射配置:这可能是通过XML配置文件(如`hibernate.cfg.xml`)或注解(如`@Table`,`@Column`等)来定义实体类与数据库表的映射关系。 3. Session接口:这是Hibernate中最核心的接口,用于与数据库进行交互。...
数学建模拟合与插值.ppt
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
mysql相关资源.txt
此项目为一个HTML+CSS+JS的国漫分享网站,用户可以在此网站中观看自己喜欢的国漫。此网站共有4个页面,分别为首页,最新动态,热门推荐,分类。页面动漫图片齐全,内容可更改。可用于期末课程设计或个人课程设计。
Python爬虫爬取漫画
模拟退火算法应用。C++语言编程用模拟退火算法解决旅行商问题。该资源包含模拟退火算法C++语言的源代码。模拟退火算法是一种基于概率的全局优化算法,最初来自于物理学中的退火过程。它通过模拟金属冷却时原子排列逐渐趋于最低能量状态的过程来寻找问题的最优解。模拟退火算法常用于解决非线性、组合优化问题,特别适合于大规模、复杂的搜索空间。
传感器试题及答案.doc
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
本文档主要讲述的是MongoDB数据表基本操作;希望对大家会有帮助;感兴趣的朋友可以过来看看
本数据集提供了2011至2021年间全国各省废气和废水中主要污染物的排放量统计数据。数据涵盖了二氧化硫、氮氧化物、烟尘和颗粒物等关键污染物的排放量,为研究中国环境状况和污染物排放趋势提供了宝贵信息。数据显示,2011-2021年间,各省的二氧化硫排放量从数十万吨到数百万吨不等,其中广东、广西、海南等省份的排放量较高。氮氧化物排放量同样显示出地域差异,北京、天津等北方城市的排放量相对较低,而一些工业大省如河北、山西的排放量较高。颗粒物排放量统计显示,工业源和生活源是主要的排放源,其中工业源排放量占比较大。这些数据不仅对环保政策制定者具有参考价值,也为学术研究提供了实证基础。
脉冲宽度测量单片机课程设计.doc
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
全国矢量地图数据【国道+高速公路】ArcGIS Shape格式数据集是一种专门用于地理信息系统(GIS)的矢量数据集,包含中国范围内国道和高速公路的详细路网信息。该数据集广泛应用于交通规划、导航、物流分析和灾害应急等领域,具有高精度和易用性。 数据集特点: 1. 数据内容: 国道:包括以“G”开头的国家级公路,如G1京哈高速、G107国道等。 高速公路:包括全国范围内的所有高速公路网,覆盖主要经济区、城市和边境口岸。 属性数据: 道路编号(国道或高速公路编号)。 道路名称。 道路等级(如一级、二级、快速路等)。 起点和终点坐标。 道路长度(单位:公里)。 相关属性(如路段建成年份、设计速度、车道数等)。 2. 数据格式: **Shapefile(.shp)**格式,支持主流GIS软件(如ArcGIS、QGIS)及数据处理工具(如Python、Matlab)。 3. 投影坐标系: 一般采用WGS84地理坐标系,或可根据需求转换为**GCJ-02(火星坐标系)**以配合国内导航应用。
4
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。 感兴趣的朋友可以过来看看