已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章 Java持久化与对象数据库,JavaEE5 教程 吉林大学软件学院,主要内容,面向对象数据库的概念 ORM、伪对象数据库、JPA 普通Java应用程序调用JPA例子 会话Bean调用JPA例子,介绍,Java实体Bean只是使用Java持久化接口(JPA)操作数据库的Java实体类,和普通Java实体类没有本质区别,因此不需要服务器运行环境支持。 JPA技术本质上是一种操作数据库中的编程接口,和JDBC具有相同作用。但两者的实现思路不同:JPA提供一种面向对象式数据库操作方法,而JDBC则通过SQL语句操作数据库。,11.1 对象数据库与JPA,对象数据库与关系型数据库差异 对象数据库支持面向对象的概念,提供基于对象的直接存放和操作 关系型数据库对数据的存放基于基本数据类型。,11.1 对象数据库与JPA,11.1.1 面向对象数据库(OODB) OODB核心包括两部分:面向对象数据库管理系统(OODBMS)和面向对象数据库(OODB) 对象是面向对象数据库中基本的存在单元,存放到数据库中的对象成为持久化对象 OODB提供面向对象数据操作机制,保证面向对象系统和面向对象数据库系统的无缝衔接。 DB4O是一款纯面向对象开源数据库。,11.1 对象数据库与JPA,11.1.2 伪对象数据库与ORM软件 通过为关系型数据库系统添加特定“补丁”模块,使关系型数据库在使用效果上等同一个面向对象数据库,且对用户完全透明。“补丁”程序称为ORM映射软件,而添加了ORM映射模块的数据库则被称为伪面向对象数据库。,11.1 对象数据库与JPA,ORM与关系型数据库构造伪面向对象数据库系统,伪面向对象数据库,伪面向对象数据库系统的性能和数据管理效率要远低于纯正的面向对象数据库系统,但目前是一种主流的面向对象数据存储系统。,11.1 对象数据库与JPA,JPA是Sun公司为统一Java针对所有ORM软件的程序设计接口而推出的一个标准规范。,JPA和ORM模块示意图,11.1 对象数据库与JPA,ORM本质上是一种基于JDBC的数据库操作技术,是在JDBC基础上抽象出来的软件模块,因此需要JDBC执行环境以及数据库的JDBC驱动软件。 ORM作用: 将面向对象的概念对应翻译成关系型数据库概念 将面向对象操作翻译成以SQL语句为标准的关系型操作,11.1 对象数据库与JPA,JPA模块是对ORM接口的二次封装,使Java应用程序不依赖于具体的ORM接口,从而实现在不同ORM模块间的平行移植。 使用JPA设计的Java应用程序需要具备模块 JPA接口定义模块 ORM模块 JDBC接口模块 数据库驱动模块,11.1 对象数据库与JPA,11.1.3 JPA和实体Bean的比较 BMP是一种通过JDBC操作数据库的技术 CMP实际上是一种ORM软件机制,但复杂度高,对Java EE服务器依赖性高 JPA则是在CMP基础上,参考了其他ORM软件模块特点,重新设计的Java持久化方案。,11.2 JPA程序初步,开发基于JPA数据库应用程序步骤 将JPA模块配置到特定数据库,构成伪对象数据库 设计基于JPA对象数据库系统 通过对象查询语句或其它途径操作伪对象数据库程序设计方法,11.2 JPA程序初步,例子:设计一个名称为mydb的伪对象数据库系统,11.2 JPA程序初步,11.2.1伪对象数据库与持久化单元 在Java EE中,一个伪对象数据库对应persistence.xml中的一个标记,该标记定义了所能操作的数据库服务器特征和能存储的对象类型。 一个单元信息被实例化成实体对象管理器对象(EntityManager)。 EntityManager可以对中的所有实体对象进行对象数据库操作。 一个persistence.xml文件可以包含多个单元,不同单元具有不同名称属性,对应了不同伪对象数据库系统。, org.hibernate.ejb.HibernatePersistence com.Person ,persistence.xml,对persistence.xml讲解: 引用了MySql数据库的JDBC驱动,因而在该文件被使用或部署时,需要提供MySql JDBC驱动 需要和JPA软件模块以及应用程序一起部署,在执行过程中被应用软件调用,是应用软件的组成模块。,11.2 JPA程序初步,11.2.2设计伪对象数据库结构 第一步:关系型数据库中用于存放对象的表结构 第二步:伪对象数据库中的持久化类,11.2 JPA程序初步,设计关系型数据库中的存储结构,CREATE TABLE persons ( Id int(11) NOT NULL auto_increment, name varchar(50) default NULL, age int(11) default NULL, sex varchar(50) default NULL, PRIMARY KEY (Id) ) insert into persons(ID, Name,Age,Sex) values( 1, zhangsan, 32,male); insert into persons(ID, Name,Age,Sex) values( 2, lisi, 32,male); insert into persons(ID, Name,Age,Sex) values( 3, wangwu, 32,male);,11.2 JPA程序初步,设计持久化类 /*01*/package ; /*02*/ /*03*/import java.io.*; /*04*/import javax.persistence.*; /*05*/ /*06*/Entity /*07*/Table(name = “PERSONS“) /*10*/public class Person implements Serializable /*11*/ /*12*/ Id /*13*/ /*15*/ Column(name = “ID“, nullable = false) /*16*/ private Integer id; /*17*/ /*18*/ Column(name = “NAME“) /*19*/ private String name; /*20*/ /*21*/ Column(name = “AGE“) /*22*/ private Integer age; /*23*/,Person.java,/*24*/ Column(name = “SEX“) /*25*/ private String sex; /*26*/ /*27*/ public Person() /*28*/ public Person(Integer id) /*29*/ this.id = id; /*30*/ /*31*/ /*32*/ public Integer getId() /*33*/ return this.id; /*34*/ /*35*/ public void setId(Integer id) /*36*/ this.id = id; /*37*/ /*38*/ /*39*/ public String getName() /*40*/ return ; /*41*/ /*42*/ public void setName(String name) /*43*/ = name; /*44*/ /*45*/ /*46*/ public Integer getAge() /*47*/ return this.age; /*48*/ /*49*/ public void setAge(Integer age) /*50*/ this.age = age; /*51*/ /*52*/ /*53*/ public String getSex() /*54*/ return this.sex; /*55*/ /*56*/ public void setSex(String sex) /*57*/ this.sex = sex; /*58*/ /*59*/,Person.java,11.2 JPA程序初步,表和类对应关系的基本原则: 类和表对应 类中的成员变量和表中的字段对应 类的标识属性(Id)和表的主键对应,JPA属性功能列表,11.2 JPA程序初步,持久化类和普通Java类区别 持久化Java类是一个实体类,其重要信息是类中的成员变量;类方法不重要 持久化Java类中,成员变量通常要按照JavaBean的setter和getter方式,定义负责成员变量读写的setter和getter方法 在Java持久化类中,其成员变量通常不使用基本数据类型,而是Java中的对应引用类型 持久化类通常是可序列化的 持久化类通常具备一个ID类型属性,使用Id标识,将实体类型和persistence.xml关联 persistence-unit对应伪对象数据库,实体类对应伪对象数据库中的一个具体对象类型. 一个persistence-unit所能管理的对象类型,默认情况下对应了包含persistence.xml配置文件的jar包中所有被Entity标注的Java实体类。 总结:基于JPA ORM的伪对象数据库,通常包括如下几个部分:持久化类定义、表定义、 persistence-unit定义,11.2 JPA程序初步,11.2.3操作伪面向对象数据库 使用OQL(Object Query Language)。OQL是大小写敏感的。 /*01*/package client; /*02*/ /*03*/import javax.persistence.*; /*04*/import java.util.*; /*05*/import .*; /*06*/ /*07*/public class test /*08*/ /*09*/ public static void main(String args) throws Exception /*10*/ /*11*/ EntityManagerFactory factory = /*12*/ Persistence.createEntityManagerFactory(“mydb“,null); /*13*/ EntityManager manager = factory.createEntityManager(); /*14*/ try /*15*/ /*16*/ createPerson(manager); /*17*/ showAll(manager); /*18*/ /*19*/ finally /*20*/ /*21*/ manager.close(); /*22*/ factory.close(); /*23*/ /*24*/ ,/*25*/ public static void createPerson(EntityManager manager) /*26*/ /*27*/ Person p=new Person(); /*28*/ p.setName(“wangwu6“); /*29*/ p.setAge(new Integer(31); /*30*/ p.setSex(“male“); /*31*/ EntityTransaction transaction = manager.getTransaction(); /*32*/ transaction.begin(); /*33*/ manager.persist(p); /*34*/ mit(); /*35*/ /*36*/ public static void showAll(EntityManager manager) /*37*/ /*38*/ EntityTransaction transaction = manager.getTransaction(); /*39*/ transaction.begin(); /*40*/ Query q=manager.createQuery(“select c from Person c“); /*41*/ List results=q.getResultList(); /*42*/ mit(); /*43*/ Iterator it=results.iterator(); /*44*/ while(it.hasNext() /*45*/ /*46*/ Person p=(Person)it.next(); /*47*/ System.out.print(p.getId()+“t“); /*48*/ System.out.print(p.getName()+“t“); /*49*/ System.out.print(p.getAge()+“t“); /*50*/ System.out.println(p.getSex()+“t“); /*51*/ /*52*/ /*53*/,11.2 JPA程序初步,11.2.3操作伪面向对象数据库 (1)JPA 操作程序的基本结构,JPA应用程序的基本结构,11.2 JPA程序初步,11.2.3操作伪面向对象数据库 (2)EntityManager数据库管理模块 EntityManager充当了伪对象数据库管理系统的功能,通过该接口可以实现对伪对象数据库的各种操作。 EntityManagerFactory类的核心作用是根据配置信息创建EntityManager对象,通过该对象可以实现对伪对象数据库的管理. /*11*/ EntityManagerFactory factory = /*12*/ Persistence.createEntityManagerFactory(“mydb“,null); /*13*/ EntityManager manager = factory.createEntityManager();,11.2 JPA程序初步,11.2.3操作伪面向对象数据库 (3)JPA数据库操作过程中的事务性 JPA通过面向对象方式操作数据库的本质:将面向对象型操作(如生成对象、更改和删除)转变成SQL语句,然后在通过SQL语句操作传统关系型数据库。 为什么需要事务:一个原子的面向对象操作,通常对象多条SQL语句。通过EntityManager对象进行的操作必须使用事务环境,否则无法保证JPA对象操作的原子性。,public static void createPerson(EntityManager manager) /*26*/ /*27*/ Person p=new Person(); /*28*/ p.setName(“wangwu6“); /*29*/ p.setAge(new Integer(31); /*30*/ p.setSex(“male“); /*31*/ EntityTransaction transaction = manager.getTransaction(); /*32*/ transaction.begin(); /*33*/ manager.persist(p); /*34*/ mit(); /*35*/ ,11.2 JPA程序初步,11.2.3操作伪面向对象数据库 (4)面向对象数据库查询 完成数据库中对象的查询通常需要Query类,该类的对象代表针对伪对象数据库的一些操作。和JDBC中的Statement相似。,/*36*/ public static void showAll(EntityManager manager) /*37*/ /*38*/ EntityTransaction transaction = manager.getTransaction(); /*39*/ transaction.begin(); /*40*/ Query q=manager.createQuery(“select c from Person c“); /*41*/ List results=q.getResultList(); /*42*/ mit(); /*43*/ Iterator it=results.iterator(); /*44*/ while(it.hasNext() /*45*/ /*46*/ Person p=(Person)it.next(); /*47*/ System.out.print(p.getId()+“t“); /*48*/ System.out.print(p.getName()+“t“); /*49*/ System.out.print(p.getAge()+“t“); /*50*/ System.out.println(p.getSex()+“t“); /*51*/ ,11.2 JPA程序初步,11.2.3操作伪面向对象数据库 (5)面向对象数据插入 其实就是新建一个对象并使用EntityManager的persist方法保存。,/*25*/ public static void createPerson(EntityManager manager) /*26*/ /*27*/ Person p=new Person(); /*28*/ p.setName(“wangwu6“); /*29*/ p.setAge(new Integer(31); /*30*/ p.setSex(“male“); /*31*/ EntityTransaction transaction = manager.getTransaction(); /*32*/ transaction.begin(); /*33*/ manager.persist(p); /*34*/ mit(); /*35*/ ,11.3 在会话Bean中使用JPA,包含步骤: (1) Java EE中伪对象数据库构建 构造Java EE环境下的伪对象数据库 伪对象数据库结构设计 (2) 会话Bean对JPA的调用,11.3 在会话Bean中使用JPA,11.3.1 Java EE中伪对象数据库构建 (1) Java EE中伪对象数据库构建 需要配置数据源以及定义伪对象数据库。 Java EE下,声明伪对象数据库方法 mySQL ,11.3 在会话Bean中使用JPA,11.3.1 Java EE中伪对象数据库构建 (2) 伪对象数据库结构设计 与前节介绍相同,包括数据库的结构设计和实体类设计 Persistence.xml和Java持久化类间的关联方法与前节介绍相同,11.3 在会话Bean中使用JPA,11.3.2会话Bean对JPA的调用 /*01*/package ; /*02*/ /*03*/import bits.db.*; /*04*/import java.util.*; /*05*/import javax.ejb.*; /*06*/ /*07*/Remote /*08*/public interface IPersonAdmin /*09*/ /*10*/ public List QueryAll(); /*11*/ public void createPerson(Person p) ; /*12*/,会话Bean的业务接口,/*01*/package ; /*02*/ /*03*/import javax.persistence.*; /*04*/import java.util.*; /*05*/import javax.ejb.*; /*06*/import bits.db.*; /*07*/ /*08*/Stateless(mappedName=“mySession“) /*09*/public class MySession implements IPersonAdmin /*10*/ /*11*/ PersistenceContext(unitName=“mydb“) /*12*/ private EntityManager manager; /*13*/ public List QueryAll() /*14*/ /*15*/ Query q=manager.createQuery(“select c from Person c“); /*16*/ List results=q.getResultList(); /*17*/ List result=(List)results; /*18*/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46385.22-2025光路板第2-2部分:基本试验和测量程序尺寸测量
- 《GB-Z 35959-2018液相色谱-质谱联用分析方法通则》专题研究报告
- 2025年中国保险行业数字化转型研究报告
- 2025年驾照考试科目一1500题及答案(八)
- 紫胶制片工创新方法考核试卷含答案
- 白酒酿造工安全培训竞赛考核试卷含答案
- 海洋生物调查员安全行为测试考核试卷含答案
- 渠道维护工岗前创新方法考核试卷含答案
- 公司商品监督员岗位应急处置技术规程
- 通信网络管理员岗位设备安全技术规程
- 基于机器学习的智能投资决策支持系统
- 西安交通大学考研真题-管理知识资料学
- 人教版六年级数学上册第三单元大单元教学任务单
- 红树林生态系统
- 二次根式计算专项训练150题含答案
- 《营养饮食与癌症》课件
- 钢材材质质检报告
- 兽药残留检测仪FT-SY操作说明
- 私募基金双录话术全套
- 工程造价咨询服务方案(技术方案)
- 【高中语文】《燕歌行(并序)》课件++统编版选择性必修中册
评论
0/150
提交评论