java对象持久化

合集下载

java的(PO,VO,TO,BO,DAO,POJO)解释

java的(PO,VO,TO,BO,DAO,POJO)解释

PO:全称是persistant object持久对象最形象的理解就是一个PO就是数据库中的一条记录。

好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。

BO:全称是business object:业务对象主要作用是把业务逻辑封装为一个对象。

这个对象可以包括一个或多个其它的对象。

比如一个简历,有教育经历、工作经历、社会关系等等。

我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。

建立一个对应简历的BO对象处理简历,每个BO包含这些PO。

这样处理业务逻辑时,我们就可以针对BO去处理。

VO :value object值对象ViewObject表现层对象主要对应界面显示的数据对象。

对于一个WEB页面,或者SWT、SWING的一个界面,用一个VO对象对应整个界面的值。

DTO :Data Transfer Object数据传输对象主要用于远程调用等需要大量传输对象的地方。

比如我们一张表有100个字段,那么对应的PO就有100个属性。

但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VOPOJO :plain ordinary java object 简单java对象个人感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。

一个POJO持久化以后就是PO直接用它传递、传递过程中就是DTO直接用来对应表示层就是VODAO:data access object数据访问对象这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要.主要用来封装对数据库的访问。

通过它可以把POJO持久化为PO,用PO组装出来VO、DTOO/R Mapping 是Object Relational Mapping(对象关系映射)的缩写。

JDO是什么

JDO是什么

JDO是Java对象持久化的新的规范。

JDO经SunJava Community Process认定。

1)一、历史JDO是对象持久化工作的综合成果,试图提供一个对象持久化的完全版本。

JDO同时继承于ODMG(对象数据管理小组,标准化对象数据库的一个独立委员会)和对象关系映射工具提供商。

JSR #000012 approved in July 19991999-8组建的专家小组:包括Sun、Apple、BEA、IBM、Oracle、SAP、WebGain等2000-5 完成公开评论草案2000-6 在JavaOne上引入2001-3 最终草案0.932001-5 最终草案0.96公布2001-6 在JavaOne上启动2001-11 最终草案0.982)二、目标定义对象级的持久化。

∙完全支持对象模型,包括引用、集合、接口、继承∙完全透明持久化:这使得业务对象完全独立于任何数据库技术,这使用了一个字节码增强机制(a byte-code enhancement mechanism)。

∙缩短开发周期(不再需要映射)∙在开发小组中清晰地划分业务人员和数据库人员。

∙通用持久性JDBC限于RDBMS,JDO潜在地可以处理任何类型的数据源,包括RDBMS,ODBMS,TP监控处理,ASCII无格式文件,xml文件,properties文件,大机上的Cobol数据库,等JDO是面向大型信息系统的一个完全的解决方案,在这样的系统中,信息存储于多种异质数据源∙涵盖J2EE、J2SE、J2ME的广泛实现∙强壮的事务模型∙同时支持C/S和多层体系结构3)三、体系JDO 包PersistentCapable:拥有持久实例的类必须实现这个接口。

管理对象生命周期。

PersistenceManager :代表了到数据源的连接。

一个应用可以打开一个或多个PersistenceManagers。

PersistenceManagerFactory:允许从数据源中得到一个PersistenceManager的实例,这个工厂也可以作为一个连接池。

jpa 自动持久化 原理

jpa 自动持久化 原理

jpa 自动持久化原理JPA(Java Persistence API)是Java中一种持久化框架,它提供了一种简单而强大的方式来将Java对象映射到关系数据库中。

JPA 的自动持久化原理是通过将Java对象与数据库表进行映射,实现对象的自动保存、更新和删除。

JPA的自动持久化原理主要是通过注解或XML配置来实现的。

在Java类中,我们可以使用@Entity注解将该类标记为实体类,使用@Id注解将该类的某个属性标记为主键。

通过这样的标记,JPA就能够自动将该实体类与数据库表进行关联。

当我们对实体对象进行操作时,JPA会自动将操作转化为对数据库的增删改操作。

例如,当我们调用EntityManager的persist方法将一个实体对象持久化时,JPA会自动将该对象保存到数据库中。

当我们修改实体对象的属性时,JPA会自动更新数据库中对应的记录。

当我们调用EntityManager的remove方法删除一个实体对象时,JPA会自动删除数据库中对应的记录。

JPA的自动持久化还支持事务管理。

通过使用注解或XML配置,我们可以将一系列的数据库操作组织成一个事务。

在事务提交或回滚时,JPA会自动将对应的操作应用到数据库中。

JPA的自动持久化原理还包括了一些其他特性,如缓存管理、延迟加载等。

通过使用这些特性,我们可以提高系统的性能和效率。

总的来说,JPA的自动持久化原理是通过将Java对象与数据库表进行映射来实现的。

通过使用注解或XML配置,我们可以将实体类与数据库表进行关联,并实现对实体对象的自动保存、更新和删除。

同时,JPA还提供了事务管理、缓存管理等特性,以提高系统的性能和效率。

Java对象持久化方法研究

Java对象持久化方法研究

S QL语 句 是 面 向关 系 的 , 赖 于关 系 数 据 模 型 , 依
使 开 发人员 不 能完全 运用 面 向对 象的思 想来 设计 程 序 为 了把 数据 访 问细 节 和 业务 逻辑 完 全 分 开 ,
收 稿 日期 :0 50— 6 2 0 —91
储持久数据 。J O不是一个轻量级封装 , D 其标准 很 不完善 。 了能 够在竞 争 中脱颖 而 出 , 个 厂, 文章对Hient 的基本原理进行 了深入 的探讨 最后通过 一个实 brae 例说明如何利用 Hien t b rae进行对象 的持久化操作 。
关键词 Jv brae 对 象 持 久 化 ; 象 / 系 映 射 aa Hien t; 对 关
文献标识码 : A 中 图 分 类 号 : P 1J T 3 2A
AbtatHien t ia p ns uc bet essigto a ss R mapn pte src: br ae s no e -o re jc p rit lh t e p igt ma o n o t u O/ o h Jv betnoterl in l aa ae hsat l ma e h ru ha a s fh aip ic l aao j t h e t a d tb s.T i rie d too g n l io eb s r i e ci ao c a ys t c n p
程 序 结构不 清 晰 , 当关系 数据模 型 发生 变化 时 , 则 必 须 修 改 程 序 代 码 中 的所 有 相 关 的 S 语 句 。 QI
关 系 映射 元 素据 各 不 相 同 , E B不 能从 一 个 使 J
E B容 器顺 利地 移植 到另 一个 E B容器 中 。 J J

如何在Java中进行数据的持久化和读取操作

如何在Java中进行数据的持久化和读取操作

如何在Java中进行数据的持久化和读取操作数据的持久化是指将程序中的数据存储在持久存储介质中(如文件、数据库等)以便下次程序运行时能够重新读取和使用。

在Java中,数据的持久化和读取操作可以通过文件操作、数据库操作、序列化和反序列化等方式实现。

本文将重点介绍在Java中进行数据的持久化和读取操作的几种方法。

一、文件操作1.1文件写入在Java中进行文件数据的持久化操作可以使用FileOutputStream 或者BufferedWriter等类来实现。

通过FileOutputStream类,可以将数据以字节的形式写入文件,示例代码如下:```javatry {String data = "Hello, World!";FileOutputStream fos = new FileOutputStream("data.txt");fos.write(data.getBytes());fos.close();} catch (IOException e) {e.printStackTrace();}```上述代码中,首先定义了一个字符串数据并赋值给data变量,然后通过FileOutputStream类打开文件输出流,并将字符串数据以字节形式写入文件中,最后关闭文件输出流。

1.2文件读取使用FileInputStream或者BufferedReader类可以实现对文件数据的读取操作。

示例代码如下:```javatry {FileInputStream fis = new FileInputStream("data.txt");int content;while ((content = fis.read()) != -1) {System.out.print((char) content);}fis.close();} catch (IOException e) {e.printStackTrace();}```上述代码中,首先使用FileInputStream类打开文件输入流,并定义一个整型变量content用于存储读取的字节数据。

java项目中VO和DTO以及Entity,各自是在什么情况下应用的

java项目中VO和DTO以及Entity,各自是在什么情况下应用的

java项⽬中VO和DTO以及Entity,各⾃是在什么情况下应⽤的j2ee中,经常提到⼏种对象(object),理解他们的含义有助于我们更好的理解⾯向对象的设计思维。

POJO(plain old java object):普通的java对象,有别于特殊的java对象(含继承约束等)和EJB。

POJO⼀般只有⼀系列的属性和相应的get、set⽅法。

PO(persistant object):持久化对象,有别于POJO,必须对应数据库中的实体。

⼀个PO对应数据库的⼀条记录。

持久化对象的⽣命周期与数据库密切相关,只能存在于connection之中,连接关闭后,PO就消失了。

PO相对于POJO有诸多不同,⽐如PO中会有保存数据库entity状态的属性和⽅法。

但是ORM(object-relation mapping)追求的⽬标是PO和POJO的⼀致,所以在程序员的⽇常开发中,都是将POJO作为PO使⽤,⽽将POJO转化为PO的功能交给hibernate等框架来实现。

DTO(data transfer object):数据传输对象,以前被称为值对象(VO,value object),作⽤仅在于在应⽤程序的各个⼦系统间传输数据,在表现层展⽰。

与POJO对应⼀个数据库实体不同,DTO并不对应⼀个实体,可能仅存储实体的部分属性或加⼊符合传输需求的其他的属性。

DAO(data access object):数据访问对象。

提供访问数据库的抽象接⼝,或者持久化机制,⽽不暴露数据库的内部详细信息。

DAO提供从程序调⽤到持久层的匹配。

BO(business object):业务对象。

主要是将业务逻辑封装为⼀个对象,该对象可以包含⼀个或多个其他对象。

如,"Principal"(委托⼈),有"Name","Age"等属性,同时和"Employee"(雇员)有1对多的关系,这个"Principal"就可以作为⼀个与业务相关的PO。

jpa标准

jpa标准

JPA标准详解一、简介Java持久化API(Java Persistence API,简称JPA)是一种用于执行SQL数据库操作的Java API。

它为面向对象的开发人员提供了一种将Java对象映射到关系数据库的方式,并提供了在Java应用程序和数据库之间进行数据交互的方法。

二、JPA的历史和发展JPA最初是由EJB 3.0规范中的CMP(容器管理持久性)模块发展而来的。

后来,这个规范被独立出来,形成了现在的JPA标准。

JPA的主要目标是简化Java 应用程序与数据库之间的交互,使得开发人员可以专注于业务逻辑的开发,而不需要关心底层的数据访问细节。

三、JPA的特性1. 简单易用:JPA提供了一种简单的方法来定义对象-关系映射(ORM),使得开发人员可以快速地将Java对象映射到数据库表。

2. 类型安全:JPA支持泛型和注解,可以在编译时检查类型错误,提高代码的健壮性和可维护性。

3. 透明性:JPA可以将复杂的数据访问逻辑隐藏在抽象层之下,使得开发人员可以专注于业务逻辑的开发。

4. 跨平台:JPA是基于Java的,因此它可以在任何支持Java的平台上运行。

四、JPA的核心概念1. 实体(Entity):实体是数据库中的一张表,它是JPA中的基本单位。

每个实体都有一个唯一的标识符,通常是主键。

2. 持久化单元(Persistence Unit):持久化单元是一组实体、存储库和其他持久化配置的集合。

它定义了应用程序与数据库之间的连接信息。

3. 存储库(Repository):存储库是一个接口,它定义了对实体进行CRUD操作的方法。

存储库可以是本地的,也可以是远程的。

4. 查询语言(Query Language):JPA支持多种查询语言,包括JPQL(Java Persistence Query Language)、Criteria API和原生SQL。

五、JPA的使用步骤1. 定义实体:使用@Entity注解定义实体类,并使用@Table注解指定对应的数据库表。

利用Hibernate对象持久化服务简化Java数据库访问之我见

利用Hibernate对象持久化服务简化Java数据库访问之我见
的映射, 是一种方便的框架。 其设计主要是为了将软件开发人员 J a v a 应 用程 序 与 数 据库 之 间 以H i b e r n a t e 作为 纽带 ,
从 繁琐 的编程 工作 中解放 出来 。 H i b e r n a t e 负责从 J a v a 数据 类 H i b e r n a t e 负责数据库 与J a v a 对 象 问的映射。 在 对H i b e r n a t e
效、易用 的O / R 映射 框架 , 使得持 久层 的开发 得 到了极大 的简 推厂 因为H i b e r n a t e  ̄J D B C 进行了轻 量级封装 , 实现了用户可
化。
绕过 H i b e r n a t e 直接对J D B C A P I 进行访 问。 H i b e r n a t e 自身的 T r a n s a c t i o n 实质 上就是底层J D B C T r a n s a c t i o n 的封装 , 这就
型 向S Q L 数据 类型 的映射, 提 供对 象数据 的检索与 查询 , 降低 框 架 进行应 用时 , 首先 , 应 该编 写其配 置 文化 ; 其次, 根 据配 了手动处 理J D B C 及S Q L 上花 费的时间。 对载 入类 的过程有 效的 置文 焕生成映射文件, 然后完成数据库 与J a v a 对 象问的映射, 进行 了简化, 降低了利用H O L 从数据库提 取数据的编码量 , 节约 生成 持久化对 象 ; 最后 , 编写业务逻 辑类 , 实现 业务逻 辑 。 对 了开发成本与时间。 通过该技术 的使用, 还能够对传统的D A O 、 H i b e r n a t e 框 架在对象持久化 中的应用用 以下案例进行 说明。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章对象持久化什么是持久化?简单地说,持久化就是把数据同步保存到数据库或某些存储设备中。

在软件的分层体系结构中,持久化层是与数据库打交道的逻辑层。

在数据库中对数据的增加、删除、查找和修改操作由持久化层来处理。

最常见的操作是在ASP或JSP的页面代码中混杂了很多连接数据库、操作数据库的语句,这实际上是把持久层和展现层耦合到了一起,使得代码的编写和维护都很困难,程序结构非常不清晰。

对于大型应用,这个问题尤为突出,因此,对系统结构进行分层,是解决这种耦合问题的前提保障。

Java程序员对使用JDBC进行数据库编程不会感到陌生。

实际上,使用JDBC对数据库中的数据进行增加、删除、修改的操作就是持久化的过程。

然而,直接使用JDBC作为持久层有一些难以解决的问题。

1.1 JDBC面临的一些问题常规访问数据库的方法是直接使用JDBC。

而在实际的应用中它有一些缺点,详细的解释见下面内容所述。

1.1.1 JDBC简介JDBC是一种用于执行SQL语句的Java API(JDBC本身是个商标名而不是一个缩写字,然而,JDBC常被认为是代表“Java数据库连接(Java Database Connectivity)”),它由一组用Java编程语言编写的类和接口组成。

JDBC为工具/数据库开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序。

有了JDBC,向各种关系数据库发送SQL语句就是一件很容易的事。

换言之,有了JDBC API,就不必为访问Sybase 数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,为访问Informix 数据库又写另一个程序等。

只需用JDBC API写一个程序即可,它可向相应数据库发送SQL语句。

而且,使用Java编程语言编写的应用程序无需去考虑要为不同的平台编写不同的应用程序。

将Java和JDBC结合起来将使程序员只需写一遍程序就可让它在任何平台上运行。

简单地说,JDBC可做3件事:❑与数据库建立连接。

❑发送SQL语句。

处理结果。

1.1.2 繁琐的代码问题看一个插入对象的基本例子,这里增加一个用户对象。

public void addAccount(final Account account) throws DAOException,AccountAlreadyExistException {final Connection conn = getConnection();PreparedStatement pstmt=con.prepareStatement("insert into account values(?,?,?,?,?,?,?,?,?)");pstmt.setString(1, account.getUserName());pstmt.setInt(2, account.getPassWord());pstmt.setString(3, account.getSex());pstmt.setString(4, account.getQq());pstmt.setString(5, account.getMsn());pstmt.setString(6, account.getTel());pstmt.setString(7, account.getAddress());pstmt.setString(8, account.getHeight());pstmt.setString(9, account.getEnglevel());pstmt.execute();conn.Close();}这个操作很简单,就是把增加一个Account对象的对象逻辑转化为一个insert操作,即实现最简单的Account对象到数据库表account的映射。

上面是由开发人员手工编写JDBC 代码来实现。

如果Account对象的属性有上百个,就要写上百行的pstmt.setString()语句,很容易出错。

如果有另一个对象Person,也要写相近的代码来实现增加一个Person的操作。

类似的例子和代码在大量的项目中都存在。

从1996年JDBC出现到目前已经9年,大量的项目开发还在重复地编写这样的代码来实现这些每个项目都需要的基本操作。

开发数据访问层的工作量(开发和测试)极大,对开发人员的要求也很高。

最不幸的是,在大量的项目开发中都需要重复这种繁复的数据访问层的开发,从而导致大量的人力、物力和财力都浪费在这种人力密集型的数据访问层重复开发中,而数据库操作也恰恰是项目开发中最容易出错和消耗大量时间的部分。

如果在项目需要面对不同的数据库,则还需要为每个数据库开发一个专门的数据访问层。

显然这种每个项目都重复但却具备相同模式的代码是一种明显的浪费。

这就催生了O/R Mapping技术的产生。

ORM即Object-Relation Mapping,它的作用是在关系型数据库和对象之间作一个自动映射,这样在具体的操作数据库时,就不需要再与复杂的SQL语句打交道,只要像操作对象即可,O/R Mapping工具会自动地将对象的操作转换为SQL语句操作。

这样就只需要关注业务逻辑中的对象架构,而不是底层的重复性SQL和JDBC代码。

1.1.3 多表连接问题比如一个学校,在数据库中建立多张表,分别命名为班级表、学生基本信息表、学生成绩表、学生选课表、老师基本信息表和老师教授班级表,如果有一个条件查询,需要得知学生基本信息、成绩和选课信息,则要在SQL语句中用连接查询3个表。

这无可非议。

关键这种复杂的SQL语句相当难以维护。

当彻底删除一个学生资料时,需要把数据库中有关此学生的资料都删除,在此需要根据学生id把学生基本信息表、学生成绩表、学生选课表中的学生资料都删除,程序员必须知道关于学生的表有哪几张,并且对这几张表进行操作。

工作原理是比较简单的,但真正实施起来,编写和维护代码都非常不便。

1.1.4 表间级联问题仍然使用1.1.3小节中学校的例子来讲解。

相关对象通俗一点讲,学校是爷爷,班级是父,学生是子。

如果要删除一个班级,直接使用JDBC的话,这种操作对于程序员来说极其繁琐。

需要按照以下的操作进行:(1)首先在班级信息表中找到班级,取得班级id,然后删除此班级的基本信息。

(2)根据班级id删除此班级所有学生的基本信息。

(3)删除每个学生所对应的资料(例如成绩表、选课表等)。

(4)如果还有级联,则递归地把级联信息删除。

使用JDBC非常熟练的程序员,也不得不花费很多精力在这种级联关系的数据库操作上,而真正需要关心的业务逻辑在精力花费中的比重就降低了。

这不得不说是JDBC让人头痛的地方。

1.1.5 层与层之间的耦合严重不管是面向过程/结构的开发方法还是面向对象的开发方法,几乎所有的项目和产品的软件开发中都必须涉及关系数据库的数据存取更新等问题。

和关系数据库打交道是所有项目产品开发中首先需要面对的,目前的开发技术需要为每个项目开发一个数据访问层(Data Access Layer)来作为商业逻辑代码的基础,如图1-1所示。

用户界面业务逻辑层数据访问层OB2Oracle SQL Server Sybase图1-1 系统的分层结构JDBC实际上是数据访问层,通过它访问和操作数据层的数据库。

然而,作为数据访问层的编程人员,必须要很熟悉SQL语句,并且对底层的数据表了如指掌,例如哪个表中有什么字段以及字段的意义等程序员都必须知道。

这样的话,经常的做法是,程序员本身兼职DBA。

因为此时数据访问层和数据层是密不可分的。

使用ORM技术则不会存在这个问题。

数据层完全被隐藏了,暴露在程序员面前的只是一些JavaBean对象,在程序中通过JavaBean的属性来间接操作数据表中的字段。

当然这种操作的转换是由ORM产品来完成的,对于程序员来说,只是简单地做了一些getXXX和setXXX方法就可以完成对关系数据表的操作。

程序员不用知道什么时候数据库从MySQL移到DB2,或是移到SQL Server 2000,也不用知道数据库名是什么,表名是什么,字段是什么,对于他来说这没有关系。

甚至程序员可以不用知道SQL语句,可以不懂数据库的任何知识。

只需要在适当的时候,调用JavaBean的setXXX和getXXX方法,就可以取得和改变数据表字段的值;对于程序员来说,JavaBean就是存储信息的实体,对JavaBean的操作,就是对信息实体的操作(实际上是数据表)。

如此一来,设计人员只要把系统框架搭出来,把一些JavaBean交给程序员去实现业务逻辑即好。

这样的结构比程序员调用JDBC去操作数据库要清晰优雅得多。

1.1.6 性能问题对于insert操作,普通JDBC程序员这样来写:pstmt = conn.prepareStatement("insert into user_info values(?,?)");for (int i=0; i< list.length; i++) {pstmt.setString(1,(User)list.get(i).getName());pstmt.setString(2, (User)list.get(i).getPwd());pstmt.executeUpdate();}如果批量插入n条记录,那么就是n次向数据库发送SQL语句。

而ORM技术的Hibernate 则是采用了JDBC 2.0的batch功能。

for (int i=0; i<list.length; i++) {pstmt.setString(1,(User)list.get(i).getName());pstmt.setString(2, (User)list.get(i).getPwd());pstmt.addBatch();}pstmt.executeBatch();只是1次向数据库发送SQL,性能高下判若分明。

update操作与此类似。

select操作可以使用JCS缓冲查询结果,重复查询比JDBC肯定要快很多;分页操作可以使用数据库的分页SQL,或者使用JDBC2.0的scroll result。

另外,Hibernate总是尽量延迟向数据发送SQL,它会先把SQL语句缓冲在Session的缓冲区中,最后在flush时一次性的向数据库发送。

总体来说,当使用Hibernate时,相当于有一个JDBC高手来帮你优化JDBC调用,那点封装了一层的损失可以忽略不计。

1.2 使用ORM在时下的软件开发中,ORM这个词组越来越多地被人们提起。

前面已经介绍了,ORM 是对象到关系的映射,它把对表直接进行的操作变成对持久化类的属性和方法的直接操作,ORM层作为分层体系中的持久层。

相关文档
最新文档