第9章Java持久API课堂

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1JavaEE应用技术基础2回顾:EJB₪JAR、WAR和EAR₪EJB:■32+1₪会话Bean■SLSB■SFSB₪会话Bean部署3回顾:EJB₪JNDI编程:■JNDI类■编程过程javax.naming.Context(interface)其中INITIAL_CONTEXT_FACTORY和PROVIDER_URL。javax.naming.Naming(interface)javax.naming.InitialContext(class)其中lookup()、list()、bind()、createSubcontext()、unbind()Java.util.Propertes(class)其中setProperties()和getProperties()、list()//设置初始化上下文的参数,主要是设置JNDI驱动的类名//java.naming.factory.initial和提供命名服务的的URL-java.naming.provider.url,//java.naming.factory.initial的值因提供JNDI服务器的不同而不同,//java.naming.provider.url的值包括提供命名服务的主机地址和端口号。Propertiesp=newProperties();p.setProperty(java.naming.factory.initial,org.jnp.interfaces.NamingContextFactory);p.setProperty(java.naming.provider.url,localhost:1099);//初始化上下文环境,生成一个上下文实例InitialContextjndiContext=newInitialContext(p);ObjectlookupObject=jndiContext.lookup(“jndiname”);4回顾:EJB₪着重说一下JbossEJBJNDI名称默认的命名规则:1)如果EJB打包进后缀为*.ear的JavaEE发布文件,默认的JNDI路径名称是访问本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local访问远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote例:EJBHelloEjb打包进名为HelloEjb.ear的JavaEE应用,访问它远程接口的JNDI名是:HelloEjb/HelloEjbBean/remote2)如果EJB应用打包成后缀为*.jar的发布文件,默认的JNDI路径名称是访问本地接口:EJB-CLASS-NAME/local访问远程接口:EJB-CLASS-NAME/remote例:HelloEjb应用打包成HelloEjb.jar文件,访问它远程接口的JNDI名称是:HelloEjbBean/remote另外有一点要注意:EJB-CLASS-NAME是不带包名的,如cn.edu.ujn.test.HelloEjbBean只需取HelloEjbBean。5回顾:消息驱动Bean₪消息驱动BeanProducer1Producer2TopicConsumer1Consumer2Producer1Producer2QueueConsumer16回顾:消息驱动Bean7回顾:消息驱动Bean8第9章JAVA持久API9学习要点:实体Bean实体类实体的生命周期事务处理直接操纵实体数据并发访问和锁查找实体和QueryAPI命名查询EJB-QL语言10第9章JAVA持久API9.1Java持久化API概述9.2数据库同步119.1Java持久化API概述₪9.1.1实体Bean₪9.1.2实体类₪9.1.3实体的生命周期₪9.1.4事务处理129.1.1实体Bean₪实体Bean有着一组属性并且每个属性与数据库表中的每个字段一一对应。₪公开get和set方法供外界访问。₪每一个属性对应数据库表中的一个字段,这样一个Bean实例就对应了表中的一条记录。₪并不是固定的一个实例对应一条记录。139.1.1实体Bean₪保持实体Bean■可以手工完成持久化操作■可以让EJB容器完成持久化操作₪实体bean和对话bean的比较■实体bean不允许保存每个客户端的信息。会话bean允许保存客户端的状态信息。■实体bean允许保存记录的,会话bean既可以保存客户端的信息又可以保存数据库记录的信息。■会话bean也不能提供在相同或不同的EJB类调用间进行全局的事务控制。₪实体Bean的分类■1)CMP类型的实体Bean■2)BMP类型的实体Bean149.1.2实体类₪实体类用于表示数据库中的表,实体类的编写主要确定如下信息:■该实体与数据库中的哪个表对应;■实体类中的属性与表中的哪个字段对应;■实体类中的哪个属性是主键。159.1.2实体类₪编写实体类的主要知识点■声明该类为实体类:@Entity■声明该实体类与哪个表对应:@Table(name=userinfo)■声明该实体类与表中的哪个列对应,如:■声明主键,如:@Column(name=userid,nullable=false)privateStringuserid;@Column(name=username,nullable=false)privateStringusername;@Column(name=userpass,nullable=false)privateStringuserpass;@Column(name=usertype,nullable=false)privatecharusertype;@Id@GeneratedValue(strategy=GenerationType.AUTO)169.1.3实体的生命周期受管新建删除分离new()persist()persist()remove()终止PersistenceContextmerge()17第9章JAVA持久API9.1Java持久化API概述9.2数据库同步189.2数据库同步₪9.2.1直接操纵实体数据₪9.2.3查找实体和QueryAPI₪9.2.4命名查询₪9.2.5EJB-QL语言199.2.1直接操纵实体数据实体数据RDBMS实体持久化提供者O/RMapping现有应用直接修改数据库209.2.3查找实体和QueryAPI₪find()操作的方法签名。₪EntityManagerAPI的使用步骤:■从EntityManager获得javax.persistence.Query实例。■自定义Query实例。比如,设置查询参数、控制结果集的大小。■执行查询。₪使用EJB-QL和SQL创建查询的EntityManager操作:/**通过主键进行查找*/publicTTfind(ClassTentityClass,ObjectprimaryKey);/**创建执行EJBQL语句的Query*/publicQuerycreateQuery(StringejbqlString);/**创建执行原生SQL语句的Query*/publicQuerycreateNativeQuery(StringsqlString);219.2.3查找实体和QueryAPI₪从数据库中返回所有Account实体的简单EJB-QL查询实例。₪重载createNativeQuery()方法。将SQL结果集数据映射到实体,从而返回给客户。publicListAccountlistAccounts(){Queryquery=manager.createQuery(SELECTaFROMAccounta);returnquery.getResultList();}publicQuerycreateNativeQuery(StringsqlString,ClassresultClass);publicQuerycreateNativeQuery(StringsqlString,StringresultSetMapping);229.2.4命名查询可能需要在整个持久化单元中使用单个查询语句,或者需要为部署者或管理员提供变更查询语句的便利,这时我们可以使用静态查询(StaticQuery),静态查询也被称之为命名查询(NamedQuery)。239.2.4命名查询从外部的命名查询字符串创建Query对象,需要使用EntityManager提供的如下操作。在调用createNamedQuery之前,开发者必须定义好相应的命名查询。比如,在如下给出的listAccounts()方法中使用了这一操作。/**创建命名查询(EJBQL或原生SQL)*/publicQuerycreateNamedQuery(Stringname);publicListAccountlistAccounts(){Queryquery=manager.createNamedQuery(findThem);returnquery.getResultList();}249.2.5EJB-QL语言EJB-QL用来在CMP类型的EJB中描述finders和select方法。设计这种语言的目的是严格地描绘内存对象的查询,而不是数据库的查询。但是EJB-QL的语法与SQL非常相似。它有三个基本语句:SELECT、FROM、WHERE。通过这几个语句可以实现各种各样的组合。259.2.5EJB-QL语言常用语法:当处理一个select方法时,返回类型(SELECT语句)可以不用是OBJECT(x)。可以为任意类型的任意值。示例如下:SELECTOBJECT(variable)FROMabstractSchemaName[AS]variable[WHEREvaluecomparisonvalue]SELECT[DISTINCT]valueFROMabstractSchemaName[AS]variable[WHERE...]26回顾:Hibernate₪开发步骤:■导入JAR包+hibernate.cfg.xml■POJO类■映射文件:*.hbm.xml,需要在hibernate.cfg.xml中声明■DAO层接口和实现类₪目录结构(参考)■WEB-INF/classes/hibernate.cfg.xml■*.model.pojo类+*.model.映射文件(*.hbm.xml)■*.DAO.DAO层接口和实现类27JPA₪开发步骤:■配置文件persistence.xml■编写带标注的实体类■编写DAO层类₪目录结构:■META-INF/persistence.xml■实体Bean:带注释的POJO类■DAO层接口和实现类(会话Bean)28例子:开发JPA29开发JPA₪步骤:■1.创建一个项目,并添加JPACapabilities(JPA开发功能);■2.使用DBExplorer视图来选中表并反向工程生成JPA代码。30开发JPA₪准备工作:■新建XSB表■在MyEclipseDatabaseExplorer视图下,建立一个MySQL数据库的连接(略)列名描述数据类型可空默认值说明XH学号Char(6)×无主键XM姓名Char(8)×无XB性别bit×无1:男,0:女CSSJ出生时间datetime√无ZY_ID专业IDint×无ZXF总学分int√无BZ备注Varchar(200)√无ZP照片mediumblob√无31开发JPA₪新建一个JavaProject:hellojpa32开发JPA₪添加JPA的开发能力33开发JPA₪新建package:cn.ujn.jpa.dao₪切换到MyEclipseDatabaseExplorer视图下,选中表xsb并反向工程生成JPA代码34开发JPA₪切换回MyEclipseJavaEnterprise视图下,查看生成的代码:35开发JPA₪编写测试类:₪新建类TestJPA.java3

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功