《Java持久化与对象数据库.ppt》由会员分享,可在线阅读,更多相关《Java持久化与对象数据库.ppt(43页珍藏版)》请在三一办公上搜索。
1、第11章 Java持久化与对象数据库,JavaEE5 教程吉林大学软件学院,主要内容,面向对象数据库的概念ORM、伪对象数据库、JPA普通Java应用程序调用JPA例子会话Bean调用JPA例子,介绍,Java实体Bean只是使用Java持久化接口(JPA)操作数据库的Java实体类,和普通Java实体类没有本质区别,因此不需要服务器运行环境支持。JPA技术本质上是一种操作数据库中的编程接口,和JDBC具有相同作用。但两者的实现思路不同:JPA提供一种面向对象式数据库操作方法,而JDBC则通过SQL语句操作数据库。,11.1 对象数据库与JPA,对象数据库与关系型数据库差异对象数据库支持面向对
2、象的概念,提供基于对象的直接存放和操作关系型数据库对数据的存放基于基本数据类型。,11.1 对象数据库与JPA,11.1.1 面向对象数据库(OODB)OODB核心包括两部分:面向对象数据库管理系统(OODBMS)和面向对象数据库(OODB)对象是面向对象数据库中基本的存在单元,存放到数据库中的对象成为持久化对象OODB提供面向对象数据操作机制,保证面向对象系统和面向对象数据库系统的无缝衔接。DB4O是一款纯面向对象开源数据库。,11.1 对象数据库与JPA,11.1.2 伪对象数据库与ORM软件通过为关系型数据库系统添加特定“补丁”模块,使关系型数据库在使用效果上等同一个面向对象数据库,且对
3、用户完全透明。“补丁”程序称为ORM映射软件,而添加了ORM映射模块的数据库则被称为伪面向对象数据库。,11.1 对象数据库与JPA,ORM与关系型数据库构造伪面向对象数据库系统,伪面向对象数据库,伪面向对象数据库系统的性能和数据管理效率要远低于纯正的面向对象数据库系统,但目前是一种主流的面向对象数据存储系统。,11.1 对象数据库与JPA,JPA是Sun公司为统一Java针对所有ORM软件的程序设计接口而推出的一个标准规范。,JPA和ORM模块示意图,11.1 对象数据库与JPA,ORM本质上是一种基于JDBC的数据库操作技术,是在JDBC基础上抽象出来的软件模块,因此需要JDBC执行环境以
4、及数据库的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基础上,参
5、考了其他ORM软件模块特点,重新设计的Java持久化方案。,11.2 JPA程序初步,开发基于JPA数据库应用程序步骤将JPA模块配置到特定数据库,构成伪对象数据库设计基于JPA对象数据库系统通过对象查询语句或其它途径操作伪对象数据库程序设计方法,11.2 JPA程序初步,例子:设计一个名称为mydb的伪对象数据库系统,11.2 JPA程序初步,伪对象数据库与持久化单元在Java EE中,一个伪对象数据库对应persistence.xml中的一个标记,该标记定义了所能操作的数据库服务器特征和能存储的对象类型。一个单元信息被实例化成实体对象管理器对象(EntityManager)。EntityM
6、anager可以对中的所有实体对象进行对象数据库操作。一个persistence.xml文件可以包含多个单元,不同单元具有不同名称属性,对应了不同伪对象数据库系统。,org.hibernate.ejb.HibernatePersistence com.Person,persistence.xml,对persistence.xml讲解:引用了MySql数据库的JDBC驱动,因而在该文件被使用或部署时,需要提供MySql JDBC驱动需要和JPA软件模块以及应用程序一起部署,在执行过程中被应用软件调用,是应用软件的组成模块。,11.2 JPA程序初步,设计伪对象数据库结构第一步:关系型数据库中用于
7、存放对象的表结构第二步:伪对象数据库中的持久化类,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,S
8、ex)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*/Col
9、umn(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;/
10、*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 this.name;/*41*/*42*/public void setName(String name)/*43*/this.name=name;/*44*/*45*/*46*/public Integer getAge()/*47*/return this.ag
11、e;/*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程序初步,持久化类和普
12、通Java类区别持久化Java类是一个实体类,其重要信息是类中的成员变量;类方法不重要持久化Java类中,成员变量通常要按照JavaBean的setter和getter方式,定义负责成员变量读写的setter和getter方法在Java持久化类中,其成员变量通常不使用基本数据类型,而是Java中的对应引用类型持久化类通常是可序列化的持久化类通常具备一个ID类型属性,使用Id标识,将实体类型和persistence.xml关联persistence-unit对应伪对象数据库,实体类对应伪对象数据库中的一个具体对象类型.一个persistence-unit所能管理的对象类型,默认情况下对应了包含p
13、ersistence.xml配置文件的jar包中所有被Entity标注的Java实体类。总结:基于JPA ORM的伪对象数据库,通常包括如下几个部分:持久化类定义、表定义、persistence-unit定义,11.2 JPA程序初步,操作伪面向对象数据库使用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*
14、/*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*
15、/*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*/transac
16、tion.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();/*
17、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程序初步,操作伪面向对象数据库(
18、1)JPA 操作程序的基本结构,JPA应用程序的基本结构,11.2 JPA程序初步,操作伪面向对象数据库(2)EntityManager数据库管理模块EntityManager充当了伪对象数据库管理系统的功能,通过该接口可以实现对伪对象数据库的各种操作。EntityManagerFactory类的核心作用是根据配置信息创建EntityManager对象,通过该对象可以实现对伪对象数据库的管理./*11*/EntityManagerFactory factory=/*12*/Persistence.createEntityManagerFactory(mydb,null);/*13*/Entit
19、yManager manager=factory.createEntityManager();,11.2 JPA程序初步,操作伪面向对象数据库(3)JPA数据库操作过程中的事务性JPA通过面向对象方式操作数据库的本质:将面向对象型操作(如生成对象、更改和删除)转变成SQL语句,然后在通过SQL语句操作传统关系型数据库。为什么需要事务:一个原子的面向对象操作,通常对象多条SQL语句。通过EntityManager对象进行的操作必须使用事务环境,否则无法保证JPA对象操作的原子性。,public static void createPerson(EntityManager manager)/*26
20、*/*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程序初步,操作伪面向对象数据库(4)面向对象数据库查询完成数据库中对象的查询通常需要Query类,该类的对象代
21、表针对伪对象数据库的一些操作。和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*/Iter
22、ator 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程序初步,操作伪面向对象数据库(5)面向对象数据插入其实就是新建一个对象并使用EntityM
23、anager的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
24、);/*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)伪对象数据库结构设计与前节介绍相同,包括数据库的结构设计和实体类设计Persis
25、tence.xml和Java持久化类间的关联方法与前节介绍相同,11.3 在会话Bean中使用JPA,会话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的业务接
26、口,/*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
27、;/*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*/return result;/*19*/*20*/public void createPerson(Person p)/*21*/*22*/manager.persist(p);/*23*/*24*/,会话EJB的实现类,11.3 在会话Bean中使用JPA,11
28、.3.2 测试程序设计/*07*/public final class Client/*08*/*09*/public static void main(String argv)throws Exception/*10*/*11*/Hashtable ht=new Hashtable();ht.put(Context.INITIAL_CONTEXT_FACTORY,weblogic.jndi.WLInitialContextFactory);ht.put(Context.PROVIDER_URL,t3:/127.0.0.1:7001);Context ctx;ctx=new InitialCo
29、ntext(ht);IPersonAdmin myinf=null;myinf=(IPersonAdmin)ctx.lookup(mySession#com.IPersonAdmin);,/*25*/List all=myinf.QueryAll();/*26*/for(int i=0;iall.size();i+)/*27*/*28*/System.out.print(all.get(i).getId()+t);/*29*/System.out.print(all.get(i).getName()+t);/*30*/System.out.print(all.get(i).getSex()+t);/*31*/System.out.println(all.get(i).getAge();/*32*/*33*/ctx.close();/*34*/*35*/,小结,本章小结面向对象数据库的概念ORM、伪对象数据库、JPA和ORM关系普通Java应用程序调用JPA例子会话Bean调用JPA例子下一章JPA实体Bean,
链接地址:https://www.31ppt.com/p-6509815.html