《持久API课堂》PPT课件.ppt_第1页
《持久API课堂》PPT课件.ppt_第2页
《持久API课堂》PPT课件.ppt_第3页
《持久API课堂》PPT课件.ppt_第4页
《持久API课堂》PPT课件.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,Java EE应用技术基础,济南大学信息学院 刘鹍 ,2,回顾:EJB,JAR、WAR和EAR EJB: 32+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 -vider.url, / java.naming.factory.initial的值因提供JNDI服务器的不同而不同,/vider.url的值包括提供命名服务的主机地址和端口号。 Properties p=new Properties(); p.setProperty(“java.naming.factory.initial“, “erfaces.NamingContextFactory“); p.setProperty(“vider.url“, “localhost:1099“); / 初始化上下文环境,生成一个上下文实例 InitialContext jndiContext = new InitialContext(p); Object lookupObject=jndiContext.lookup(“jndiname”);,4,回顾:EJB,着重说一下Jboss EJB JNDI名称默认的命名规则:,1)如果 EJB 打包进后缀为*.ear的 JavaEE发布文件,默认的 JNDI路径名称是 访问本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local 访问远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote 例:EJB HelloEjb打包进名为HelloEjb.ear的JavaEE应用,访问它远程接口的 JNDI名是:HelloEjb/HelloEjbBean/remote 2)如果 EJB 应用打包成后缀为*.jar的发布文件, 默认的 JNDI路径名称是 访问本地接口:EJB-CLASS-NAME/local 访问远程接口:EJB-CLASS-NAME/remote 例: HelloEjb 应用打包成 HelloEjb.jar 文件,访问它远程接口的 JNDI名称是: HelloEjbBean/remote 另外有一点要注意:EJB-CLASS-NAME 是不带包名的,如 .ujn.test.HelloEjbBean只需取HelloEjbBean。,5,回顾:消息驱动Bean,消息驱动Bean,Producer1,Producer2,Topic,Consumer1,Consumer2,Producer1,Producer2,Queue,Consumer1,6,回顾:消息驱动Bean,7,回顾:消息驱动Bean,8,第9章 JAVA 持久API,9,学习要点:,实体Bean 实体类 实体的生命周期 事务处理 直接操纵实体数据 并发访问和锁 查找实体和Query API 命名查询 EJB-QL语言,10,第9章 JAVA 持久API,9.1 Java持久化 API 概述 9.2 数据库同步,11,9.1 Java持久化 API 概述,9.1.1 实体Bean 9.1.2 实体类 9.1.3 实体的生命周期 9.1.4 事务处理,12,9.1.1 实体Bean,实体Bean有着一组属性并且每个属性与数据库表中的每个字段一一对应。 公开get和set方法供外界访问。 每一个属性对应数据库表中的一个字段,这样一个Bean实例就对应了表中的一条记录。 并不是固定的一个实例对应一条记录 。,13,9.1.1 实体Bean,保持实体Bean 可以手工完成持久化操作 可以让EJB容器完成持久化操作 实体bean和对话bean的比较 实体bean不允许保存每个客户端的信息。会话bean允许保存客户端的状态信息。 实体bean允许保存记录的,会话bean既可以保存客户端的信息又可以保存数据库记录的信息。 会话bean也不能提供在相同或不同的EJB类调用间进行全局的事务控制。 实体Bean的分类 1)CMP类型的实体Bean 2)BMP类型的实体Bean,14,9.1.2 实体类,实体类用于表示数据库中的表,实体类的编写主要确定如下信息: 该实体与数据库中的哪个表对应; 实体类中的属性与表中的哪个字段对应; 实体类中的哪个属性是主键。,15,9.1.2 实体类,编写实体类的主要知识点 声明该类为实体类:Entity 声明该实体类与哪个表对应:Table(name = “userinfo“) 声明该实体类与表中的哪个列对应,如: 声明主键,如:,Column(name = “userid“, nullable = false) private String userid; Column(name = “username“, nullable = false) private String username; Column(name = “userpass“, nullable = false) private String userpass; Column(name = “usertype“, nullable = false) private char usertype;,Id GeneratedValue(strategy=GenerationType.AUTO),16,9.1.3 实体的生命周期,17,第9章 JAVA 持久API,9.1 Java持久化 API 概述 9.2 数据库同步,18,9.2 数据库同步,9.2.1 直接操纵实体数据 9.2.3 查找实体和Query API 9.2.4 命名查询 9.2.5 EJB-QL语言,19,9.2.1 直接操纵实体数据,20,9.2.3 查找实体和Query API,find()操作的方法签名。 EntityManager API的使用步骤: 从EntityManager获得javax.persistence.Query实例。 自定义Query实例。比如,设置查询参数、控制结果集的大小。 执行查询。 使用EJB-QL和SQL创建查询的EntityManager操作:,/* 通过主键进行查找 */ public T find(Class entityClass, Object primaryKey);,/* 创建执行EJB QL语句的Query */ public Query createQuery(String ejbqlString); /* 创建执行原生SQL语句的Query */ public Query createNativeQuery(String sqlString);,21,9.2.3 查找实体和Query API,从数据库中返回所有Account实体的简单EJB-QL查询实例。 重载createNativeQuery()方法。将SQL结果集数据映射到实体,从而返回给客户。,public List listAccounts() Query query = manager.createQuery(“SELECT a FROM Account a“); return query.getResultList(); ,public Query createNativeQuery(String sqlString, Class resultClass); public Query createNativeQuery(String sqlString, String resultSetMapping);,22,9.2.4 命名查询,可能需要在整个持久化单元中使用单个查询语句,或者需要为部署者或管理员提供变更查询语句的便利,这时我们可以使用静态查询(Static Query),静态查询也被称之为命名查询(Named Query)。,23,9.2.4 命名查询,从外部的命名查询字符串创建Query对象,需要使用EntityManager提供的如下操作。 在调用createNamedQuery之前,开发者必须定义好相应的命名查询。比如,在如下给出的listAccounts()方法中使用了这一操作。,/* 创建命名查询(EJB QL或原生SQL) */ public Query createNamedQuery(String name);,public List listAccounts() Query query = manager.createNamedQuery(“findThem“); return query.getResultList(); ,24,9.2.5 EJB-QL语言,EJB-QL 用来在CMP类型的EJB中描述 finders和select 方法。设计这种语言的目的是严格地描绘内存对象的查询,而不是数据库的查询。 但是EJB-QL的语法与 SQL非常相似。它有三个基本语句: SELECT、FROM、WHERE。 通过这几个语句可以实现各种各样的组合。,25,9.2.5 EJB-QL语言,常用语法: 当处理一个select方法时,返回类型 ( SELECT语句) 可以不用是 OBJECT(x)。 可以为任意类型的任意值。示例如下:,SELECT OBJECT(variable) FROM abstractSchemaName AS variable WHERE value comparison value,SELECT DISTINCT value FROM abstractSchemaName 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层接口和实现类,27,JPA,开发步骤: 配置文件 persistence.xml 编写带标注的实体类 编写DAO层类 目录结构: META-INF/persistence.xml 实体Bean:带注释的POJO类 DAO层接口和实现类(会话Bean),28,例子:开发JPA,29,开发JPA,步骤: 1. 创建一个项目,并添加 JPA Capabilities(JPA 开发功能) ; 2. 使用 DB Explorer 视图来选中表并反向工程生成 JPA 代码。,30,开发JPA,准备工作: 新建XSB表 在MyEclipse Database Explorer视图下,建立一个MySQL数据库的连接(略),31,开发JPA,新建一个Java Project:hellojpa,32,开发JPA,添加JPA的开发能力,33,开发JPA,新建package:cn.ujn.jpa.dao 切换到MyEclipse Database Explorer视图下,选中表xsb并反向工程生成 JPA 代码,34,开发JPA,切换回MyEclipse Java Enterprise视图下,查看生成的代码:,35,开发JPA,编写测试类: 新建类TestJPA.java,36,开发JPA,TestJPA.java代码如下:, public class TestJPA public static void main(String args) IXsbDAO xsbdao = new XsbDAO(); Xsb xsb = new Xsb(); xsb.setXh(“201001“); xsb.setXm(“刘鹍“); xsb.setXb(Byte.valueOf(“0“); xsb.setZyId(123); xsb.setCssj(Date.valueOf(“1980-01-01“); xsb.setZxf(170); xsb.setBz(“备注“); EntityManagerHelper.beginTransaction(); xsbdao.save(xsb); EntityManagerHmit(); List xslist = xsbdao.findAll(); for (Xsb xs : xslist) String xb = xs.getXb().toString().equals(“0“) ? “男“ : “女“; System.out.println(“姓名:“ + xs.getXm() + “ 学号:“ + xs.getXh()+ “ 性别:“ + xb); System.out.println(“-“); ,37,开发JPA,运行结果如下,38,例子:开发实体Bean,39,开发实体Bean,准备工作: 新建XSB表 在MyEclipse Database Explorer视图下,建立一个MySQL数据库的连接(略),40,开发实体Bean,准备工作: 新建JNDI Data Source 找到Data Source的模板,路径如下图所示,找到mysql-ds.xml。,41,开发实体Bean,更改后代码: 修改后,拷贝mysql-ds.xml到jboss-4.2.3.GAserverdefaultdeploy下,重启JBoss, mysqlDS jdbc:mysql:/localhost:3306/javaee com.mysql.jdbc.Driver root root org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter mySQL ,42,开发实体Bean,新建EJB Project:helloEntityBean,43,开发实体Bean,新建package:cn.ujn.ejb.entity 切换到MyEclipse Database Explorer视图下,选中表xsb并反向工程生成EJB3代码,44,开发实体Bean,查看生成的代码:,45,开发实体Bean,打包,发布到JBoss中 新建Java Project:testEntityBean 在该项目的属性中,修改Java Build Path,增加JBoss client下的jar包,46,开发实体Bean,在testEntityBean中新建package:cn.ujn.ejb.entity 把helloEntityBean项目中的Xsb.java和接口XsbFacadeRemote.java拷贝到cn.ujn.ejb.entity中,47,开发实体Bean,编写测试类 新建perties 新建测试类(带main方法),代码如下:,java.naming.factory.initial=erfaces.NamingContextFactory java.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论