按通常的系统设计,使用 JDBC 操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。
一般基本都是如下几个步骤:
1、建立数据库连接,获得 Connection 对象。
2、根据用户的输入组装查询 SQL 语句。
3、根据 SQL 语句建立 Statement 对象 或者 PreparedStatement对象。
4、用 Connection 对象执行 SQL语句,获得结果集 ResultSet对象。
5、然后一条一条读取结果集 ResultSet 对象中的数据。
6、根据读取到的数据,按特定的业务逻辑进行计算。
7、根据计算得到的结果再组装更新 SQL 语句。
8、再使用 Connection 对象执行更新 SQL语句,以更新数据库中的数据。
9、最后依次关闭各个 Statement 对象和 Connection对象。
而且取出的数据是一次性的,取出后马上用,用后就消失,它的存在是"瞬间"的.但在程序中,我们经常希望我们的数据能长时间存在内存中,因为我们可能需要在多个地方用到.所以我们经常会用session保存,或其他手段.但太依赖内存会有很严重的后果,一是内存空间有限,内存价格高,而且内存会面临断电等情况,断电后内存中的所有消失都将不复存在.这时候,我们就希望我们的数据能够"持久"的存在.持久化的实现有很多种,如:放将内容放在本地文件中,将内容放在数据库中等;
这里有另一个概念:序列化--它是指将对象变为数据流,或将数据流变为对象.它主要是用于对象的传输中;
有了持久化的需求后,我们就要考虑如何来实现,用哪种方式实现,我们知道数据库的结构和对象的结构非常相似,对象有属性(或者叫字段),表也有字段,而且字段都有值,类型.所以我们就希望能够通过手段将对象的值和数据库表的值对应起来.这种对应就叫:ORM:ObjectRole Modeling对象映射模型;这种模型也让开发人员将数据库的操作也能看作是<面向对象>的了.
在上面的传统的JDBC操作流程中,我们可以将从数据库取出来的数据用自己本地的JAVA对象进行封装,即:新建对应的类,然后将值赋给对象.因为对象就能在内存中保存,所以就打破了数据值瞬间的瓶颈.在数据存储时,我们先对对象的各属性进行设置.在最后,根据对象的类型,我们转换成对某数据库表的操作,将对象的各属性值设置为表的字段值,当然也包括属性.当对象的字段类型和数据库表的字段类型有不一的时候我们需要自己处理一下.这样就相当于把对象保存在数据库中,实现了对象的持久化.而且在做了这些设计后,我们会发现,数据库操作的代码和业务逻辑的代码已经可以分的很开,这样正好符合MVC 的思想;MVC 持久化 ORM的完美结合;
上面就是简单的实现了ORM.我们需要在系统中为每个表建立对应的类,并且编写各种数据转换的逻辑.当然,我们可以将所有的类继承自一个基类,一些数据库操作通过基类或在基类中组合其他的功能类来完成;但自己完成这些逻辑会有些问题,如:如果数据库换了,以前是MySql,现在改成Mssql,或Oracle等;因为每种数据库都有些特性,一些特定数据类型等;这时候我们就需要在系统中改动我们的数据库操作SQL;而且这些逻辑的开发花了大量的时间.
在J2EE体系结构中,许多中间件供应商提供了各个层次的中间件;如web端的strtus,tapestry,等MVC框架,业务层的spring等框架来实现IOC,当然在EIS(企业级信息系统),当然也有,如: hibernate,jboss等;它们就是用来实现ORM的.
使用hibernate要先导入hibernate的几个包,以及其依赖的其他包.然后在系统中添加配置;配置分两种:1)hibernate.cfg.xml.配置全局的数据库连接,以及数据库和对象的映射;
2)Class.hbm.xml每个类对应一个配置文件,Class为类的名称;在这里要声明每个字段,以及其属性,以及可能存在的和其他类的一对多,多对一,多对多关系;
相比自己的实现和hibernate实现,hibernate兼容更多数据库,当数据库更换的时候,我们不需要做修改.但自己实现的orm可能面临修改sql等情况;而且自己实现容易出bug而且要花大量的时间;hibernate有个功能是:直接从数据源中的数据表生成对应的java类和配置文件;所以这又简化了开发人员的操作;当然,如果项目需求变更频繁,那就要不停的更改配置文件,这是很要命的.
hibernate将如何映射这些过程封装起来,然后给出一些接口,开发人员实际上使用的只有几个简单的类而已;
它的核心接口有: Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
Session接口:Session接口负责执行被持久化对象的CRUD--增加(Create)、查询(Retrieve),更新(Update), 删除(Delete)操作;但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session.
SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。所以我们可以用单件模式获得也可以在系统中定义一个static且final的变量;
Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询,它可以使用HQL或SQL两种表达方式;HQL是hibernate在SQL基础上开发出来的一种语言,它实际上就相当于把SQL封装了一次,让开发人员更容易理解;
持久化类的四个原则:
1)对象必须有个不带参数的构造函数;因为在hibernate中会调用类的:Constructor.newInstance().所以至少要有一个包内可见的构造函数;
2)有一个识别属性(可自由选择).属性的名称可以随便,但类型必须是原始类型.如: int.Long 等;
3)最好将类设为:非final;或者实现一个方法全为public的interface.因为private方法默认的就是final的.最坏的情况,hibernate可以将final类进行持久化,但它不能实现别的接口;同时,也要避免在一个不是final的类里声明publicfinal 方法;如果要使用,则必须在配置文件里将:laze 设为 false;
4)为字段声明get/set方法(可选).有些orm框架可以直接保存类的字段,但为了类的访问权限等关系.hibernate默认的是访问字段的getXX,isXX,setXX方法;所以最好还是将字段设为私有,然后声明public的get,set方法;
分享到:
相关推荐
它简化了持久化层的开发工作,使开发者能够更专注于业务逻辑的编写。 3. **LocalSessionFactoryBean**:Spring框架中的一个类,用于通过Spring IoC容器来配置和创建Hibernate SessionFactory实例。该类提供了自动...
ORM及Hibernate介绍,包括ORM及Hibernate简介,Hibernate入门学习,Hibernate数据持久化,Hibernate缓存的使用,实体关联关系映射,实体继承关系映射,Hibernate查询语言
总结起来,数据持久化是通过ORM技术如Hibernate和JDO来实现的,它简化了Java应用与数据库之间的交互。Hibernate通过运行时转换POJOs为持久对象,提供了更高的开发效率和灵活性,而JDO则通过编译时增强来优化性能。...
Hibernate是一个开源的、基于Java的持久化框架,它提供了一种在Java应用和关系数据库之间建立映射的方法,使得开发者可以通过对象模型进行数据库操作,降低了数据库访问的复杂性。它的核心组件包括:Session、...
Hibernate 操作持久化对象是Java开发中用于简化数据库交互的重要工具。它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM...
标题提到的"ORM Hibernate .jar包"指的是Hibernate框架的可执行库文件,通常包含了一系列类、接口和实现,供开发者在项目中引用,以实现ORM功能。"hibernate5+jars包"表明这是Hibernate的第五个主要版本,5.2.16....
在Hibernate中,数据持久化是通过对象和数据库记录之间的映射实现的。 2. **Hibernate 配置** - **hibernate.cfg.xml**: 这是Hibernate的配置文件,包含了数据库连接信息、JDBC驱动、方言、缓存策略等设置。 - **...
Hibernate提供了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态对于有效操纵持久化对象至关重要。 **三、配置Hibernate** 在开始操纵持久化对象之前,需要先配置Hibernate。这包括编写Hibernate配置...
《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...
Hibernate持久化技术在网上购书系统中的设计与实现 ...Hibernate持久化技术在网上购书系统中的设计和实现是非常重要的,它可以提高系统的性能和可扩展性,减少数据库操作的代码量,提高开发效率。
Hibernate的核心功能是将Java对象与数据库表进行映射,实现了数据持久化。它通过提供API来处理数据库操作,如CRUD(创建、读取、更新和删除)操作,以及查询语言HQL(Hibernate Query Language)和Criteria API,使...
总结,通过分析《hibernate-orm-3.3源码》,我们可以深入理解 Hibernate 的工作机制,掌握如何高效地使用 ORM 技术,以及如何根据需求扩展和定制 Hibernate。对于任何想提升数据库操作效率和代码可维护性的 Java ...
本论文主要研究 Hibernate 的对象关系映射(Object Relationship Mapping,ORM)框架、持久化功能以及 Hibernate 中的六个核心接口。通过对 Hibernate 的深入研究和实践,对 Hibernate 在网上购书系统中的设计和实现...
本论文主要研究Hibernate的ORM(Object Relationship Mapping)框架、持久化功能以及Hibernate中的六个核心接口Session、SessionFactory、Transaction、Query、Criteria和Configuration,并对其进行相关实践。...
Hibernate ORM 是一种强大的Java持久层框架,它实现了对象关系映射(ORM)的概念,使得开发者可以使用面向对象的方式来操作数据库...理解Hibernate的持久化机制和ORM原理,对于掌握Java Web开发中的数据管理至关重要。
《精通Hibernate:Java持久化对象技术详解[第二版]》是一部深入探讨Hibernate框架的专业书籍,旨在帮助Java开发者熟练掌握和运用这一强大的ORM(Object-Relational Mapping)工具。Hibernate是Java开发领域中广泛...
Hibernate ORM就是实现这一功能的框架,它提供了一种在Java应用中持久化对象的便捷方式。 二、配置文件 在Hibernate 3.2中,主要通过`hibernate.cfg.xml`文件进行配置。这个文件定义了数据库连接参数(如URL、...
该论文主要研究 Hibernate 的 ORM(Object Relationship Mapping)框架、持久化功能以及 Hibernate 中的六个核心接口 Session、SessionFactory、Transaction、Query、Criteria 和 Configuration,并对其进行相关实践...
总结来说,Hibernate中的持久化是ORM的一种实现,它简化了Java应用与关系数据库之间的数据交换,使得对象的状态能够在数据库中持久保存,同时减少了直接操作SQL的繁琐工作,提高了开发效率和代码的可维护性。理解和...