您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > Java持久性API
Java持久性API主要内容通过一个简单实例介绍Java持久性涉及的问题如何进行O/R映射EntityManagerFactory接口EntityManager接口Query接口25.1Java持久性实例数据库表创建编写实体类编写客户端程序persistence.xml文档结构1Java持久性实例1.1数据库表创建1Java持久性实例1.2编写实体类声明为实体类@Entity@Table(name=address,catalog=test)publicclassAddressimplementsjava.io.Serializable声明成员privateIntegeraddressSeq;privateStringfirstName;privateStringmi;privateStringlastName;privateStringstreet;privateStringcity;privateStringstate;1Java持久性实例1.2编写实体类对属性进行操作@Id//主键@Column(name=Address_Seq,unique=true,nullable=false)publicIntegergetAddressSeq(){returnthis.addressSeq;}publicvoidsetAddressSeq(IntegeraddressSeq){this.addressSeq=addressSeq;}实体类与普通Java类没有什么区别。1Java持久性实例1.3编写客户端程序方式1通过依赖注入得到实体管理器工厂@PersistenceUnitprivateEntityManagerFactoryfactory;通过实体管理器工厂得到实体管理器EntityManagermanager=factory.getManager();通过实体管理器创建Query对象,创建这个对象的过程把需要执行的查询语句作为参数,查询语句使用的是JPAQL。Stringsql=selectufromuseru;Queryq=manager.createQuery(u);25.1Java持久性实例25.1.3编写客户端程序方式2通过实体管理器HelperEntityManagerHelper管理事务IAddressDAO执行SQL操作见例子javaee_JPA25.1Java持久性实例25.1.3编写客户端程序通过Query对象的方法得到查询的结果,查询的结果是实体的对象或者是实体的对象的集合。ArrayListlist=q.getResult();根据需要对实体对象进行操作for(inti=0;ilist.size;i++){Usertemp=(User)list.get(i);System.out.println(user.getUserid());System.out.println(user.getUsername());System.out.println(user.getUserpass());System.out.println(user.getUsertype());}25.1Java持久性实例25.1.4persistence.xml配置数据库表与实体之间的对应关系persistencepersistence-unitname=userjta-data-sourceuser/jta-data-sourceclassUser/class/persistence-unit/persistence25.1Java持久性实例25.1.5文档结构test.earuser.jaruser.classMETA-INFpersistence.xmlclient.jaruserclient.class25.2O/R映射教师-部门关系普通教师类publicclassTeacher{privateStringtid;privateStringtname;privateDepartmentdept;...}25.2O/R映射教师-部门关系教师实体类importjavax.persistence.Entity;importjavax.persistence.Id;@EntitypublicclassTeacher{@IdprivateStringtid;privateStringtname;@ManyToOneprivateDepartmentdept;...}25.3EntityManagerFactory接口接口定义在JavaEE环境中使用实体管理器工厂在JavaSE环境中使用实体管理器工厂25.3EntityManagerFactory接口25.3.1接口定义创建新的实体管理器publicEntityManagercreateEntityManager();创建具有特定属性的实体管理器publicEntityManagercreateEntityManager(Mapmap);关闭实体管理器工厂publicvoidclose();判断工厂是否是打开状态publicbooleanisOpen();25.3EntityManagerFactory接口25.3.2在JavaEE环境中使用实体管理器工厂通过元注释注入@PersistenceUnitEntityManagerFactoryemf;注入之后可以直接使用25.3EntityManagerFactory接口25.3.3在JavaSE环境中使用实体管理器工厂不能注入,只能通过Persistence的方法获取EntityManagerFactoryemf=javax.persistence.Persistence.createEntityManagerFactory(Order);EntityManagerem=emf.createEntityManager();25.4EntityManager25.4.1接口定义持久化一个实例publicvoidpersist(Objectentity);合并实体的状态publicTTmerge(Tentity);删除实体实例publicvoidremove(Objectentity);根据主键查询实体publicTTfind(ClassTentityClass,ObjectprimaryKey);25.4EntityManager25.4.1接口定义(续)得到一个实体的引用publicTTgetReference(ClassTentityClass,ObjectprimaryKey);更新到数据库publicvoidflush();设置flush模式publicvoidsetFlushMode(FlushModeTypeflushMode);获取flush模式publicFlushModeTypegetFlushMode();25.4EntityManager25.4.1接口定义(续)设置锁定模式publicvoidlock(Objectentity,LockModeTypelockMode);从数据库中获取最新信息publicvoidrefresh(Objectentity);清除持久性上下文publicvoidclear();判断是否包含特定实体publicbooleancontains(Objectentity);25.4EntityManager25.4.1接口定义(续)创建执行查询的Query对象,参数就是查询publicQuerycreateQuery(StringqlString);创建执行命名查询的Query对象publicQuerycreateNamedQuery(Stringname);创建执行普通SQL语句的Query对象publicQuerycreateNativeQuery(StringsqlString);创建执行普通SQL语句的Query对象,同时指出查询结果的类型publicQuerycreateNativeQuery(StringsqlString,ClassresultClass);25.4EntityManager25.4.1接口定义(续)创建执行普通SQL语句的Query对象,同时指出映射方式publicQuerycreateNativeQuery(StringsqlString,StringresultSetMapping);参与一个事务publicvoidjoinTransaction();得到实体管理器的提供者publicObjectgetDelegate();关闭实体管理器publicvoidclose();25.4EntityManager25.4.1接口定义(续)判断是否是open的publicbooleanisOpen();返回事务对象publicvoidjoinTransaction();25.4EntityManager25.4.2实例Teachert=newTeacher();t.setTid(0039);t.setTname(张三);em.persist(t);//持久化对象Teachert=em.find(Teacher.class,0011);//根据主键查找实体em.remove(t);//删除实体25.4EntityManager25.4.3Bean实例的生命周期新建被管理分离的删除的remove()persist()update()PC结束merge()25.4EntityManager25.4.3Bean实例的生命周期4种状态新建状态,一个新创建的实例没有持久标识,并且没有与上下文环境关联,在应用中创建一个实例之后,就处于这种状态。被管理实体实例是具有持久标识的实例,并与一个持久上下文环境关联。分离的实体实例是具有持久标识但是没有与持久上下文关联的实例。删除的实体实例是具有持久标识并与上下文关联的实例,但是准备从数据库中删除。25.4EntityManager25.4.3Bean实例的生命周期持久化实体实例通过调用persist方法删除实体通过调用remove方法或者级联的删除操作同步到数据库在事务提交的时候,持久实体的状态被同步到数据库中。同步操作会把对持久实体以及它们的关系的任何更新写到数据库中。25.4EntityManager25.4.3Bean实例的生命周期分离实体:可能的来源如下事务提交事务回滚删除持久上下文关闭实体管理器串行化一个实体或者通过值传递实体合并分离的实体实例通过合并操作管理的实体实例25.4EntityManager25.4.4实体监听器和回调方法实体监听器和生命周期回调方法用于监听实体生命周期事件。可以定义在:实体类上超类实体或者超类所关联的实体监听器类上。可以通过元数据注释或者XML描述符定义25.4EntityManager25.4.4实体监听器和回调方法实体监听器类必须有一个公有的无参数的构造方法。实体监听器类是无状态的。生命周期回调方法应该遵循如下规则生命周期回调方法可以抛出不确定的或者运行时异常。在事务中执行的回调方法抛出的运行时异常会导致事务回滚。生命周期方法可以调用JNDI、JDBC、JMS和企业Bean。通常在生命周期回调方法中,应用不应该调用EntityManger或者Query操作,访问其他的实体实例,或者修改关系。25.4EntityManager25.4.4实体监听器和回调方法生命周期回调方法方法签名voidMETHOD()//定义在实体类或者超类voidMETHOD(Object)//定义在实体监听器类上访问控制符不能为:static或者final可用的
本文标题:Java持久性API
链接地址:https://www.777doc.com/doc-1085008 .html