欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    使用JPA完成实体的增删改查.ppt

    • 资源ID:5922804       资源大小:257.63KB        全文页数:32页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    使用JPA完成实体的增删改查.ppt

    第27章 使用JPA完成实体的增删改查,教材:Java EE实用教程,主要内容,27.1 实体的状态及操作27.2获取EntityManagerFactory27.3 获取实体管理器27.4 如何使用实体管理器27.5处理事务27.6 在Web中使用JPA,27.1 实体的状态及操作,27.1.1 持久化实体实例,通过调用实体管理器的persist方法可以使一个实体实例变成管理的和持久的。如果X是一个新的实体,会变成被管理的。在事务提交之前,X会被写到数据库中。如果X是一个已经存在的被管理的实体,持久操作将被忽略。但是如果X与它的关联实体之间的关系使用cascade=PERSIST或者cascade=ALL标注,意味着持久操作将影响所关联的实体,会持久化关联的实体。例如订单包含多个订单项,在持久化订单的时候,会持久化订单所涉及的订单项。如果X是一个删除的实体,它将变成被管理的。如果X是一个分离的对象,当调用persist操作的时候,将抛出EntityExistsException。或者在调用flush或者commit方法的时候产生类似的异常。对于所有实体X关联的实体Y,如果与Y的关联关系使用cascade=PERSIST或者cascade=ALL进行标注,持久操作将用于Y。例如在持久化订单的时候,与订单关联的订单项都会被持久化。,27.1.2 删除实体,通过调用实体管理器的remove方法或者级联的删除操作,一个被管理的实体实例可以变成被删除的。如果X是一个新建的实体,remove操作将被忽略。但是删除操作会被级联到关联的实体,如果关联关系标注为cascade=REMOVE或者cascade=ALL。如果X是一个被管理的实体实例,删除操作使得这个实体实例变成被删除状态。删除操作会被级联到关联的实体,如果关联关系标注为cascade=REMOVE或者cascade=ALL。如果X是一个分离的实体,调用remove操作的时候,将抛出异常IllegalArgumentException。如果X是一个删除的实体,remove操作将被忽略。在事务被提交的时候或者之前,或者作为flush操作的结果,被删除的实体X将被从数据库中删除。实体被删除之后,它的状态就是删除操作被调用的时候的状态。,27.1.3 同步到数据库,在事务提交的时候,实体的状态被更新到数据库中。同步操作会把对持久实体的更新以及对它们的关系更新写到数据库中。,27.1.4 分离实体,一个分离的实体可能来自:事务提交;事务回滚;删除持久上下文;关闭实体管理器;串行化一个实体或者通过值传递实体。分离的实体实例继续在持久上下文环境之外存在,它们的状态不再被保证与数据库中状态一致。,27.1.5 合并分离的实体状态,把分离的实例的状态传递给实体管理器管理的持久实体。,27.1.6 管理的实体实例,应用需要保证一个实例只在一个持久上下文中被管理。contains方法可以用于确定一个实体实例是否被当前持久化上下文管理。contains方法返回true的情况是:实体已经被从数据库中检索到,并且还没有被删除和分离实体实例是新建的,已经使用persiste方法,或者已经被级联到persist操作。contains方法返回false的情况是:实例是分离的。对实体调用了remove方法,或者已经被级联了remove方法。如果实例是新建的,还没有被调用persist方法或者没有级联的persist。,27.2获取EntityManagerFactory,应用通过EntityManagerFactory接口来获取实体管理器。通常EntityManagerFactory与persistence.xml中的persistenceUnit对应。实体管理工厂可以注入,也可以通过Persistence类获取。,27.2.1 通过注入获取实体管理器工厂,使用元注释:name:在环境引用上下文中访问EntityManagerFactory所使用的名字,如果使用依赖注入,就不需要了。默认值是空字符串。unitName:在persistence.xml中定义的持久单元的名字。例如:PersistenceUnitEntityManagerFactory emf;,27.2.2 通过Persistence类获取,通过调用类的createEntityManagerFactory方法来创建实体管理器工厂。参数是持久单元的名字。EntityManagerFactory emf=Persistence.createEntityManagerFactory(OrderEM);,27.3 获取实体管理器,EntityManager接口定义了与持久上下文环境进行交互的方法。包括创建实体、删除实体、修改实体、根据主键查询实体以及使用Query对象查询实体的方法。实体管理器的获取可以通过3种方式:注入实体管理器;查找实体管理器;使用实体管理器工厂创建实体管理器。,27.3.1 注入实体管理器,使用PersistenceContext注释来注入实体管理器。属性如下:name,在上下文环境引用中(例如SessionContext)访问实体管理器所使用的名字,如果使用依赖注入,就不需要了。默认值是空字符串。unitName,持久单元的名字,如果指定了unitName元素,必须与在JNDI中能够访问的实体管理器的持久单元的名字相同。默认值是空字符串。type,指定事务类型,事务类型包括扩展持久上下文(EXTEDNED)和事务范围的持久上下文(TRANSACTION)。使用PersistenceContextType.EXTENDED或者PersistenceContextType.TRANSACTION表示。properties,为容器或者持久提供者指定属性。与特定持久性提供厂商相关的属性也可以包含在这组属性中。提供商不识别的属性将被忽略。默认值是。,27.3.1 注入实体管理器,下面的代码用于注入实体管理器。例1:PersistenceContext EntityManager em;例2:PersistenceContext(type=PersistenceContextType.EXTENDED)EntityManager orderEM;,27.3.2 通过简单查询查找实体管理器,首先需要在会话Bean的Bean类上通过PersistenceContext声明实体管理器,然后在会话Bean中查找该实体管理器。在会话Bean的Bean类上声明持久上下文:PersistenceContext(name=orderEM)注入SessionContext:Resource SessionContext ctx;查找实体管理器:EntityManager em=(EntityManager)ctx.lookup(orderEM);,27.3.3 通过实体管理器工厂创建实体管理器,当使用应用管理的实体管理器的时候,应用必须使用实体管理器工厂来管理实体管理器和持久上下文生命周期,需要通过实体管理器工厂获取实体管理器。通常在Java SE环境下使用。实体管理器工厂是EntityManagerFactory的对象,假设实体管理器工厂的对象是emf,创建实体管理器的代码如下:EntityManager em=emf.createEntityManager();,27.3.4 具体用法,如果在Java SE环境下,需要:通过创建EntityManagerFactory对象;然后通过EntityManagerFactory对象创建EntityManager对象;然后使用EntityManager对象。如果在Java EE环境下:还可以注入EntityManager对象和EntityManagerFactory对象。如果是注入EntityManagerFactory,可以在注入之后创建EntityManager对象。,27.4 如何使用实体管理器,27.4.1 应用管理的实体管理器27.4.2 容器管理的实体管理器,27.4.1 应用管理的实体管理器,对于无状态会话Bean,业务方法是共享的,所以通常在每个方法中创建自己的实体管理器,使用完之后关闭。public Order getOrder(Long id)EntityManager em=emf.createEntityManager();/创建 Order order=(Order)em.find(Order.class,id);em.close();/关闭 return order;,27.4.1 应用管理的实体管理器,在会话中Bean中共享实体管理器Statelesspublic class ShoppingCartImpl implements ShoppingCart PersistenceUnitprivate EntityManagerFactory emf;private EntityManager em;PostConstructpublic void init()em=emf.createEntityManager();/创建public Order getOrder(Long id)Order order=(Order)em.find(Order.class,id);em.clear();/清空实体管理器,实体变成分离的 return order;PreDestroypublic void destroy()em.close();/关闭,27.4.1 应用管理的实体管理器,对有状态会话Bean来说,与无状态会话Bean的用法基本相同。不同的地方在于,有状态会话Bean的每个客户端对应一个Bean实例,不用每次操作之后都调用clear方法。public void initOrder(Long id)order=em.find(Order.class,id);,27.4.2 容器管理的实体管理器,在Web或者EJB容器中可以采用容器管理的实体管理器,通过PersistenceContext注入。例如:PersistenceContext EntityManager em;应用实例:Statelesspublic class ShoppingCartImpl implements ShoppingCart PersistenceContext EntityManager em;public Order getOrder(Long id)return em.find(Order.class,id);,27.5处理事务,27.5.1 容器管理的JTA实体管理器27.5.2 应用管理的JTA实体管理器27.5.3 应用管理的resource-local的实体管理器,27.5.1 容器管理的JTA实体管理器,容器管理的事务范围的持久上下文当容器管理的实体管理器被调用的时候,一个新的持久上下文开始,并且持久上下文已经与当前的JTA事务关联。当关联的JTA事务提交或者回滚的时候,持久上下文结束。例:Statelesspublic class ShoppingCartImpl implements ShoppingCart PersistenceContext EntityManager em;public Order getOrder(Long id)return em.find(Order.class,id);,27.5.1 容器管理的JTA实体管理器,容器管理的扩展持久上下文容器管理的扩展持久上下文只能在一个有状态会话Bean中初始化。它的存在从创建它的有状态会话Bean开始,并且与有状态会话Bean绑定。对扩展持久上下文的依赖通过PersistenceContext注释或者persistence-context-ref部署描述符元素声明。当有状态会话Bean的Remove方法完成的时候,持久上下文由容器关闭。例:StatefulTransaction(REQUIRES_NEW)public class ShoppingCartImpl implements ShoppingCart PersistenceContext(type=EXTENDED)EntityManager em;,27.5.2 应用管理的JTA实体管理器,事务通过JTA进行控制的实体管理器称为JTA实体管理器。UserTransaction是使用JTA事务管理器开始一个事务和结束一个事务的接口。得到UserTransaction资源之后,servlet调用UserTransaction的begin方法和commit方法来开始和提交事务。调用UserTransaction的rollback方法可以撤销事务中所有语句的执行结果来保证数据的一致性。UserTransaction资源被注入到servlet中。,27.5.2 应用管理的JTA实体管理器,ResourceUserTransaction utx;.try utx.begin();bookDAO.buyBooks(cart);mit();catch(Exception ex)try utx.rollback();catch(Exception exe)System.out.println(Rollback failed:+exe.getMessage();.,27.5.3 应用管理的resource-local实体管理器,应用通过EntityTransaction API进行事务控制的实体管理器是资源层实体管理器。public LineItem createLineItem(int quantity)em.getTransaction().begin();LineItem li=new LineItem(order,product,quantity);order.getLineItems().add(li);em.getTransaction().commit();return li;,27.6 在Web中使用JPA,因为线程安全的原因:Servlet以及ServletContextListener需要注入EntityManagerFactory。PersistenceUnitprivate EntityManagerFactory emf;JSF中的管理Bean可以注入EntityManager。PersistenceContextprivate EntityManager em;在Web应用中使用JPA与在Application中使用JPA没有什么区别。,Java EE实用教程(第二版)电子工业出版社李绪成http:/,小结,27.1 实体的状态及操作27.2获取EntityManagerFactory27.3 获取实体管理器27.4 如何使用实体管理器27.5处理事务27.6 在Web中使用JPA,谢谢!,

    注意事项

    本文(使用JPA完成实体的增删改查.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开