JPA視訊學習筆記
阿新 • • 發佈:2019-01-09
JPA
一、
06年就出來了
Java Persistence API
是Sun官方提出的Java持久化規範
為開發人員提供一種物件/關係對映工具來管理java應用中的關係資料
作用:簡化現有持久化開發工作
整合ORM技術
API實現框架有:Hibernate TopLink JDO等
目前應用不廣,但是會是未來的趨勢
API包括三方面的技術:
1、ORM對映元資料
JPA支援XML和JDK5.0的註解
元資料:描述物件和表的對映關係
2、Java持久化API
3、查詢語言
二、
用Hibernate框架開發JPA需要的jar包
Hibernate核心包(8個檔案)
hibernate-distribute-3.3.1.GA
hibernate3.jar
lib\byecode\cglib\hibernate-cglib-repack-2.1_3.jar
lib\required\*.jar
Hibernate註解包(3個檔案)
hibernate-annotations-3.4.0.GA
hibernate-annotation.jar
lib\ejb3-persistence.jar
lib\hibernate-commons-annotations.jar
Hibernate針對JPA的實現包(3個檔案)
hibernate-entitymanager-3.4.0.GA
hibernate-entitymanager.jar
lib\test\log4j.jar
lib\test\slf4j-log4j12.jar
三、persistence.xml
事物:
全域性事物:
JTA.getUserTrantion().begin();
connectin = mysql
connection = oracle
connection -> update mysql set amount=amount-xx where id=xxx(mysql)
connection -> update mysql set amount=amount+xx where id=bbb(oracle)
JTA.getUserTrantion().commit();
兩次提交協議
本地事物:
針對一個數據庫操作
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="spring_jpa_jsf"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://172.23.1.198:3306/spring_jpa_jsf?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8" />
<property name="hibernate.connection.username"
value="root" />
<property name="hibernate.connection.password"
value="123" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
四、
@Entity
@Id @GeneratedVlaue
Person p = new Person();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
em.close();
emf.close();
五、
@Table(name="xxx")
日期註解
@Temporal(TemporalType.DATE)
列舉
@Enumerated(EnumType.STRING)
@Column(length=5,nullable=false)
給預設值
private String name = "xwq";
六、大文字和二進位制資料
大文字
private String info;
@Lob
public String getInfo()
二進位制資料
private Byte[] file;
@Lob
public Byte getFile()
不想成為持久化資料(不和表中對應)
@Transient
延遲載入(一般用在大資料上面,避免不需要此資料的時候才佔用記憶體)
@Basic(fetch=FetchType.LAZY)
七、載入、更新、刪除物件
查詢:
Person p = em.find(Person.class,1);//相對hibernate get方法
沒有資料 會返回null
Person p = em.getReference(Person.class,1); //相對hibernate load方法
返回的只是代理物件,p.getName() 才去載入資料
沒有資料會報異常,在用該物件時才會報異常
更新:
Person person = em.find(Person.class,1);
person.setName("haha");
四種實體狀態:
1、新建 new
2、託管 managed 自動和資料庫同步
3、遊離
em.clear() //把實體管理器中的所有實體變成遊離狀態
em.merger(person) //把遊離狀態的物件更新同步到資料庫
4、刪除
刪除:
Person person = em.find(Person.class,1);
em.remove(person);
八、內部原理
Persistence.createEntityManagerFactory();
JPA會從類路徑下META-INF/services找到這個檔案javax.persistence.spi.PersistenceProvider
建立EntityManagerFactory 物件
九、JPQL查詢語句
Query query = em.createQuery("select p from Person p where p.id=?1");
query.setParameter(1,2);
查詢
query.getResultList();
query.getSingleResult();
刪除 更新
query.executeUpdate();
一、
06年就出來了
Java Persistence API
是Sun官方提出的Java持久化規範
為開發人員提供一種物件/關係對映工具來管理java應用中的關係資料
作用:簡化現有持久化開發工作
整合ORM技術
API實現框架有:Hibernate TopLink JDO等
目前應用不廣,但是會是未來的趨勢
API包括三方面的技術:
1、ORM對映元資料
JPA支援XML和JDK5.0的註解
元資料:描述物件和表的對映關係
2、Java持久化API
3、查詢語言
二、
用Hibernate框架開發JPA需要的jar包
Hibernate核心包(8個檔案)
hibernate-distribute-3.3.1.GA
lib\byecode\cglib\hibernate-cglib-repack-2.1_3.jar
lib\required\*.jar
Hibernate註解包(3個檔案)
hibernate-annotations-3.4.0.GA
hibernate-annotation.jar
lib\ejb3-persistence.jar
lib\hibernate-commons-annotations.jar
Hibernate針對JPA的實現包(3個檔案)
hibernate-entitymanager-3.4.0.GA
lib\test\log4j.jar
lib\test\slf4j-log4j12.jar
三、persistence.xml
事物:
全域性事物:
JTA.getUserTrantion().begin();
connectin = mysql
connection = oracle
connection -> update mysql set amount=amount-xx where id=xxx(mysql)
connection -> update mysql set amount=amount+xx where id=bbb(oracle)
JTA.getUserTrantion().commit();
兩次提交協議
本地事物:
針對一個數據庫操作
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="spring_jpa_jsf"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://172.23.1.198:3306/spring_jpa_jsf?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8" />
<property name="hibernate.connection.username"
value="root" />
<property name="hibernate.connection.password"
value="123" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
四、
@Entity
@Id @GeneratedVlaue
Person p = new Person();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
em.close();
emf.close();
五、
@Table(name="xxx")
日期註解
@Temporal(TemporalType.DATE)
列舉
@Enumerated(EnumType.STRING)
@Column(length=5,nullable=false)
給預設值
private String name = "xwq";
六、大文字和二進位制資料
大文字
private String info;
@Lob
public String getInfo()
二進位制資料
private Byte[] file;
@Lob
public Byte getFile()
不想成為持久化資料(不和表中對應)
@Transient
延遲載入(一般用在大資料上面,避免不需要此資料的時候才佔用記憶體)
@Basic(fetch=FetchType.LAZY)
七、載入、更新、刪除物件
查詢:
Person p = em.find(Person.class,1);//相對hibernate get方法
沒有資料 會返回null
Person p = em.getReference(Person.class,1); //相對hibernate load方法
返回的只是代理物件,p.getName() 才去載入資料
沒有資料會報異常,在用該物件時才會報異常
更新:
Person person = em.find(Person.class,1);
person.setName("haha");
四種實體狀態:
1、新建 new
2、託管 managed 自動和資料庫同步
3、遊離
em.clear() //把實體管理器中的所有實體變成遊離狀態
em.merger(person) //把遊離狀態的物件更新同步到資料庫
4、刪除
刪除:
Person person = em.find(Person.class,1);
em.remove(person);
八、內部原理
Persistence.createEntityManagerFactory();
JPA會從類路徑下META-INF/services找到這個檔案javax.persistence.spi.PersistenceProvider
建立EntityManagerFactory 物件
九、JPQL查詢語句
Query query = em.createQuery("select p from Person p where p.id=?1");
query.setParameter(1,2);
查詢
query.getResultList();
query.getSingleResult();
刪除 更新
query.executeUpdate();