




已阅读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.3JPA和实体Bean的比较BMP是一种通过JDBC操作数据库的技术CMP实际上是一种ORM软件机制,但复杂度高,对JavaEE服务器依赖性高JPA则是在CMP基础上,参考了其他ORM软件模块特点,重新设计的Java持久化方案。,11.2JPA程序初步,开发基于JPA数据库应用程序步骤将JPA模块配置到特定数据库,构成伪对象数据库设计基于JPA对象数据库系统通过对象查询语句或其它途径操作伪对象数据库程序设计方法,11.2JPA程序初步,例子:设计一个名称为mydb的伪对象数据库系统,11.2JPA程序初步,11.2.1伪对象数据库与持久化单元在JavaEE中,一个伪对象数据库对应persistence.xml中的一个标记,该标记定义了所能操作的数据库服务器特征和能存储的对象类型。一个单元信息被实例化成实体对象管理器对象(EntityManager)。EntityManager可以对中的所有实体对象进行对象数据库操作。一个persistence.xml文件可以包含多个单元,不同单元具有不同名称属性,对应了不同伪对象数据库系统。,org.hibernate.ejb.HibernatePersistencecom.Person,persistence.xml,对persistence.xml讲解:引用了MySql数据库的JDBC驱动,因而在该文件被使用或部署时,需要提供MySqlJDBC驱动需要和JPA软件模块以及应用程序一起部署,在执行过程中被应用软件调用,是应用软件的组成模块。,11.2JPA程序初步,11.2.2设计伪对象数据库结构第一步:关系型数据库中用于存放对象的表结构第二步:伪对象数据库中的持久化类,11.2JPA程序初步,设计关系型数据库中的存储结构,CREATETABLEpersons(Idint(11)NOTNULLauto_increment,namevarchar(50)defaultNULL,ageint(11)defaultNULL,sexvarchar(50)defaultNULL,PRIMARYKEY(Id)insertintopersons(ID,Name,Age,Sex)values(1,zhangsan,32,male);insertintopersons(ID,Name,Age,Sex)values(2,lisi,32,male);insertintopersons(ID,Name,Age,Sex)values(3,wangwu,32,male);,11.2JPA程序初步,设计持久化类/*01*/;/*02*/*03*/importjava.io.*;/*04*/importjavax.persistence.*;/*05*/*06*/Entity/*07*/Table(name=PERSONS)/*10*/publicclassPersonimplementsSerializable/*11*/*12*/Id/*13*/*15*/Column(name=ID,nullable=false)/*16*/privateIntegerid;/*17*/*18*/Column(name=NAME)/*19*/privateStringname;/*20*/*21*/Column(name=AGE)/*22*/privateIntegerage;/*23*/,Person.java,/*24*/Column(name=SEX)/*25*/privateStringsex;/*26*/*27*/publicPerson()/*28*/publicPerson(Integerid)/*29*/this.id=id;/*30*/*31*/*32*/publicIntegergetId()/*33*/returnthis.id;/*34*/*35*/publicvoidsetId(Integerid)/*36*/this.id=id;/*37*/*38*/*39*/publicStringgetName()/*40*/;/*41*/*42*/publicvoidsetName(Stringname)/*43*/=name;/*44*/*45*/*46*/publicIntegergetAge()/*47*/returnthis.age;/*48*/*49*/publicvoidsetAge(Integerage)/*50*/this.age=age;/*51*/*52*/*53*/publicStringgetSex()/*54*/returnthis.sex;/*55*/*56*/publicvoidsetSex(Stringsex)/*57*/this.sex=sex;/*58*/*59*/,Person.java,11.2JPA程序初步,表和类对应关系的基本原则:类和表对应类中的成员变量和表中的字段对应类的标识属性(Id)和表的主键对应,JPA属性功能列表,11.2JPA程序初步,持久化类和普通Java类区别持久化Java类是一个实体类,其重要信息是类中的成员变量;类方法不重要持久化Java类中,成员变量通常要按照JavaBean的setter和getter方式,定义负责成员变量读写的setter和getter方法在Java持久化类中,其成员变量通常不使用基本数据类型,而是Java中的对应引用类型持久化类通常是可序列化的持久化类通常具备一个ID类型属性,使用Id标识,将实体类型和persistence.xml关联persistence-unit对应伪对象数据库,实体类对应伪对象数据库中的一个具体对象类型.一个persistence-unit所能管理的对象类型,默认情况下对应了包含persistence.xml配置文件的jar包中所有被Entity标注的Java实体类。总结:基于JPAORM的伪对象数据库,通常包括如下几个部分:持久化类定义、表定义、persistence-unit定义,11.2JPA程序初步,11.2.3操作伪面向对象数据库使用OQL(ObjectQueryLanguage)。OQL是大小写敏感的。/*01*/packageclient;/*02*/*03*/importjavax.persistence.*;/*04*/importjava.util.*;/*05*/.*;/*06*/*07*/publicclasstest/*08*/*09*/publicstaticvoidmain(Stringargs)throwsException/*10*/*11*/EntityManagerFactoryfactory=/*12*/Persistence.createEntityManagerFactory(mydb,null);/*13*/EntityManagermanager=factory.createEntityManager();/*14*/try/*15*/*16*/createPerson(manager);/*17*/showAll(manager);/*18*/*19*/finally/*20*/*21*/manager.close();/*22*/factory.close();/*23*/*24*/,/*25*/publicstaticvoidcreatePerson(EntityManagermanager)/*26*/*27*/Personp=newPerson();/*28*/p.setName(wangwu6);/*29*/p.setAge(newInteger(31);/*30*/p.setSex(male);/*31*/EntityTransactiontransaction=manager.getTransaction();/*32*/transaction.begin();/*33*/manager.persist(p);/*34*/mit();/*35*/*36*/publicstaticvoidshowAll(EntityManagermanager)/*37*/*38*/EntityTransactiontransaction=manager.getTransaction();/*39*/transaction.begin();/*40*/Queryq=manager.createQuery(“selectcfromPersonc);/*41*/Listresults=q.getResultList();/*42*/mit();/*43*/Iteratorit=results.iterator();/*44*/while(it.hasNext()/*45*/*46*/Personp=(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.2JPA程序初步,11.2.3操作伪面向对象数据库(1)JPA操作程序的基本结构,JPA应用程序的基本结构,11.2JPA程序初步,11.2.3操作伪面向对象数据库(2)EntityManager数据库管理模块EntityManager充当了伪对象数据库管理系统的功能,通过该接口可以实现对伪对象数据库的各种操作。EntityManagerFactory类的核心作用是根据配置信息创建EntityManager对象,通过该对象可以实现对伪对象数据库的管理./*11*/EntityManagerFactoryfactory=/*12*/Persistence.createEntityManagerFactory(mydb,null);/*13*/EntityManagermanager=factory.createEntityManager();,11.2JPA程序初步,11.2.3操作伪面向对象数据库(3)JPA数据库操作过程中的事务性JPA通过面向对象方式操作数据库的本质:将面向对象型操作(如生成对象、更改和删除)转变成SQL语句,然后在通过SQL语句操作传统关系型数据库。为什么需要事务:一个原子的面向对象操作,通常对象多条SQL语句。通过EntityManager对象进行的操作必须使用事务环境,否则无法保证JPA对象操作的原子性。,publicstaticvoidcreatePerson(EntityManagermanager)/*26*/*27*/Personp=newPerson();/*28*/p.setName(wangwu6);/*29*/p.setAge(newInteger(31);/*30*/p.setSex(male);/*31*/EntityTransactiontransaction=manager.getTransaction();/*32*/transaction.begin();/*33*/manager.persist(p);/*34*/mit();/*35*/,11.2JPA程序初步,11.2.3操作伪面向对象数据库(4)面向对象数据库查询完成数据库中对象的查询通常需要Query类,该类的对象代表针对伪对象数据库的一些操作。和JDBC中的Statement相似。,/*36*/publicstaticvoidshowAll(EntityManagermanager)/*37*/*38*/EntityTransactiontransaction=manager.getTransaction();/*39*/transaction.begin();/*40*/Queryq=manager.createQuery(“selectcfromPersonc);/*41*/Listresults=q.getResultList();/*42*/mit();/*43*/Iteratorit=results.iterator();/*44*/while(it.hasNext()/*45*/*46*/Personp=(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.2JPA程序初步,11.2.3操作伪面向对象数据库(5)面向对象数据插入其实就是新建一个对象并使用EntityManager的persist方法保存。,/*25*/publicstaticvoidcreatePerson(EntityManagermanager)/*26*/*27*/Personp=newPerson();/*28*/p.setName(wangwu6);/*29*/p.setAge(newInteger(31);/*30*/p.setSex(male);/*31*/EntityTransactiontransaction=manager.getTransaction();/*32*/transaction.begin();/*33*/manager.persist(p);/*34*/mit();/*35*/,11.3在会话Bean中使用JPA,包含步骤:(1)JavaEE中伪对象数据库构建构造JavaEE环境下的伪对象数据库伪对象数据库结构设计(2)会话Bean对JPA的调用,11.3在会话Bean中使用JPA,11.3.1JavaEE中伪对象数据库构建(1)JavaEE中伪对象数据库构建需要配置数据源以及定义伪对象数据库。JavaEE下,声明伪对象数据库方法mySQL,11.3在会话Bean中使用JPA,11.3.1JavaEE中伪对象数据库构建(2)伪对象数据库结构设计与前节介绍相同,包括数据库的结构设计和实体类设计Persistence.xml和Java持久化类间的关联方法与前节介绍相同,11.3在会话Bean中使用JPA,11.3.2会话Bean对JPA的调用/*01*/;/*02*/*03*/importbits.db.*;/*04*/importjava.util.*;/*05*/importjavax.ejb.*;/*06*/*07*/Remote/*08*/publicinterfaceIPersonAdmin/*09*/*10*/publicListQueryAll();/*11*/publicvoidcreatePerson(Personp);/*12*/,会话Bean的业务接口,/*01*/;/*02*/*03*/importjavax.persistence.*;/*04*/importjava.util.*;/*05*/importjavax.ejb.*;/*06*/importbits.db.*;/*07*/*08*/Stateless(mappedName=mySession)/*09*/publicclassMySessionimplementsIPersonAdmin/*10*/*11*/PersistenceContext(unitName=mydb)/*12*/privateEntityManagermanager;/*13*/publicListQueryAll()/*14*/*15*/Queryq=manager.createQuery(“selectcfromPersonc);/*16*/Listresults=q.getResultList();/*17*/Listresult=(List)results;/*18*/retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 的出租合同范本
- 生产与销售合同范本
- 上海出售民房合同范本
- 水泥制件销售合同范本
- 外包服务合同范本模板
- 寻找灵感创作委托合同
- 农民怎么写合同范本
- 020版租房合同范本
- 物业泳池转租合同范本
- 网络安全评估托管合同
- 水电运行培训课件
- 十一皮草活动方案
- 居家护理服务标准化操作手册
- 省级质控中心管理制度
- 诊所日常器械管理制度
- 新生儿42天体检要点解析
- 煤矿联网课题题目及答案
- 2025至2030中国安保服务市场现状动态与前景方向分析报告
- 2025内蒙古巴彦淖尔市能源(集团)有限公司招聘48人笔试参考题库附带答案详解析集合
- 林科院面试题库及答案
- T/CSIQ 8014.1-2018组串式光伏逆变器技术规范第1部分:总则
评论
0/150
提交评论