• J2EE之JPA


    POJO(plain old java object普通java类):具有setter/getter方法的Java类就称为POJO 

    POJO转化为实体,手工使用标记,

    @Entity

    public class XXXX{...

    JDBC方法由于它的简易性而具有吸引力,JTA方法提供了更多灵活性。你选择什么样的实现将依赖于你的应用程序的特定需求。


    JTA:Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。

    Javax.transaction.UserTransaction接口使得应用程序能够编程控制事务边界。JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。

     应用程序调用begin()来起动事务,即可调用commit()也可以调用rollback()来结束事务。

    (A卡取钱,转入B卡)

    XML(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络

    ---------------------------------------------------------------------------------------------------------------------

    事务:访问或更新数据库中各种数据项的一个程序执行单元(一系列不可分割的改动数据库的操作),具备ACID特性

    持久化的过程:内存中对象被管理的过程,对象鱼数据库自动同步,由系统完成这个过程。

    持久化上下文:由处于托管状态下的全部实体实例的集合构成(被JPA管理的内存空间)

    实体管理器:是实体对象与数据库进行交互的桥梁,所有的数据库操作都需要通过实体管理器进行,提供管理对象的方法,当持久化上下文处于打开状态时,实体管理器将跟踪实体实例的状态,对实体实例所做的修改将会自动同步到数据库。

    分2种:J2EE  分布式的            java SE   local的

    持久化单元: 持久化单元通过persistence.xml文件定义实体管理器管理下的实体集合(他们都映射到同一个数据库中),该XML文件里的<persistence-unit>元素用于定义持久化单元,<persistence-unit>元素的name属性是持久化单元的名称 eg:first,    EntityManagerFactory,作为EntityManager的工厂,包含有当前O-R映射   的元数据信息,每个EntityManagerFactory,可称为一个持久化单元(PersistenceUnit),每个持久化单元可认为是一个数据源的映射(所谓 数据源,可理解为一个数据库,我们可以在应用服务器中配置多个数据源,同时使用不同的PersistenceUnit来映射这些数据源,从而能够很方便的实现跨越多个数据库之间的事务操作!)

    //通过Persistence.createEntityManagerFactory(“持久化单元的名称”);方法就能获取实体管理器工厂实例,进而获得实体管理器实例。

    EntityManagerFactory emf =Persistence.createEntityManagerFactory("first");

    EntityManager em=emf.createEntityManager();

    //然后调用getTransaction()方法获取实体事务对象,对实体的增删改查之前,都要用tx.begin()开启事务

    EntityTransaction tx= em.getTransaction();

    tx.begin();

    em.persist(Student);//将Student持久化到数据库

    tx.commit();

    .

    .

    tx.begin();

    /**对实体实例的任何改动操作

    *..

    *..

    *....

    */

    tx.commit();

    //关闭实体管理器

    em.close();

    emf.close();


    实体管理器API:


    detached  游离

    managed:实体管理器将实体持久化后,状态变为托管

    persist(java.lang.Object  entity):创建托管实体,并将实体保存到数据库中,但并不是立即更改数据库。

    find(entityclass,primaryKey)通过给定的实体类型和实体主键,在特定上下文中查找实体实例,找到则返回之。

    merge(entity)不能直接将实体状态由游离变为托管,而是重新生成一个托管状态的实体实例,内存->数据库

    refresh(entity)从数据库中读取实体状态,即刷新。

    remove(entity)从数据库中删除实体实例         序列化:将对象的每个属性保存到数据库)


    @Resource可以理解为资源->数据源->也就是数据连接,基本上就是告诉程序数据库在哪里

    @PersistenceContext
    则是注入一坨保存实体类状态的数据结构,针对实体类的不同状态(四种,managedh或detached等)可以做出不同的反应(merge,persist等等),其实就是把数据从数据库里提出,然后在内存里处理的,再返回数据库的法则。

  • 相关阅读:
    连接mysql遇到的问题
    洛谷 P3369 【模板】普通平衡树(Treap/SBT)
    开博啦
    luogu【P2753】[USACO4.3]字母游戏Letter Game
    luogu【P3377】 【模板】左偏树
    POJ-2251
    HDU-1518
    Coderforces-455A
    UVA-1608
    Coderfocers-551C
  • 原文地址:https://www.cnblogs.com/gaoxiangde/p/4379861.html
Copyright © 2020-2023  润新知