JPA-API
1.?javax.persistence.Persistence:
Persistence 類是用于獲取 EntityManagerFactory 實例。該類包含一個名為 createEntityManagerFactory 的 靜態方法 。
createEntityManagerFactory 方法有如下兩個重載版本。
|- 帶有一個參數的方法以 JPA 配置文件 persistence.xml 中的持久化單元名為參數
|- 帶有兩個參數的方法:前一個參數含義相同,后一個參數 Map類型,用于設置 JPA 的相關屬性,這時將忽略其它地方設置的屬性。Map 對象的屬性名必須是 JPA 實現庫提供商的名字空間約定的屬性名。
2.?javax.persistence.EntityManagerFactory:
EntityManagerFactory 接口主要用來創建 EntityManager 實例。該接口約定了如下4個方法:
|- createEntityManager():用于創建實體管理器對象實例。
|- createEntityManager(Map map):用于創建實體管理器對象實例的重載方法,Map 參數用于提供 EntityManager 的屬性。
|- isOpen():檢查 EntityManagerFactory 是否處于打開狀態。實體管理器工廠創建后一直處于打開狀態,除非調用close()方法將其關閉。
| -close():關閉 EntityManagerFactory 。 EntityManagerFactory 關閉后將釋放所有資源,isOpen()方法測試將返回 false,其它方法將不能調用,否則將導致IllegalStateException異常。
3.?javax.persistence.EntityManager:
在 JPA 規范中, EntityManager 是完成持久化操作的核心對象。實體作為普通 Java 對象,只有在調用 EntityManager 將其持久化后才會變成持久化對象。EntityManager 對象在一組實體類與底層數據源之間進行 O/R 映射的管理。它可以用來管理和更新 Entity Bean, 根椐主鍵查找 Entity Bean, 還可以通過JPQL語句查詢實體。
實體的狀態:
|-?新建狀態: 新創建的對象,尚未擁有持久性主鍵。
|-?持久化狀態:已經擁有持久性主鍵并和持久化建立了上下文環境
|-?游離狀態:擁有持久化主鍵,但是沒有與持久化建立上下文環境
|-?刪除狀態: 擁有持久化主鍵,已經和持久化建立上下文環境,但是從數據庫中刪除。
4.?javax.persistence.EntityManager:
》find (Class<T> entityClass,Object primaryKey):
返回指定的 OID 對應的實體類對象,如果這個實體存在于當前的持久化環境,則返回一個被緩存的對象;否則會創建一個新的 Entity, 并加載數據庫中相關信息;若 OID不存在于數據庫中,則返回一個 null。第一個參數為被查詢的實體類類型,第二個參數為待查找實體的主鍵值。
》getReference (Class<T> entityClass,Object primaryKey):
與find()方法類似,不同的是:如果緩存中不存在指定的 Entity, EntityManager 會創建一個 Entity 類的代理,但是不會立即加載數據庫中的信息,只有第一次真正使用此 Entity 的屬性才加載,所以如果此 OID 在數據庫不存在,getReference() 不會返回 null 值, 而是拋出EntityNotFoundException
》persist (Object entity):
用于將新創建的 Entity 納入到 EntityManager 的管理。該方法執行后,傳入 persist() 方法的 Entity 對象轉換成持久化狀態。
|-?如果傳入 persist() 方法的 Entity 對象已經處于持久化狀態,則 persist() 方法什么都不做。
|-?如果對刪除狀態的 Entity 進行 persist() 操作,會轉換為持久化狀態。
| -如果對游離狀態的實體執行 persist() 操作,可能會在 persist() 方法拋出 EntityExistException(也有可能是在flush或事務提交后拋出)
》remove (Object entity):
刪除實例。如果實例是被管理的,即與數據庫實體記錄關聯,則同時會刪除關聯的數據庫記錄。
》merge (T entity):
merge() 用于處理 Entity 的同步。即數據庫的插入和更新操作
》flush ():
同步持久上下文環境,即將持久上下文環境的所有未保存實體的狀態信息保存到數據庫中。
》setFlushMode (FlushModeType flushMode):
設置持久上下文環境的Flush模式。參數可以取2個枚舉
|-?FlushModeType.AUTO 為自動更新數據庫實體,
|- FlushModeType.COMMIT 為直到提交事務時才更新數據庫記錄。
|-?FlushModeType.AUTO 為自動更新數據庫實體,
|-?FlushModeType.COMMIT 為直到提交事務時才更新數據庫記錄。
》getFlushMode ():
獲取持久上下文環境的Flush模式。返回FlushModeType類的枚舉值。
》refresh (Object entity):
用數據庫實體記錄的值更新實體對象的狀態,即更新實例的屬性值。
》clear ():
清除持久上下文環境,斷開所有關聯的實體。如果這時還有未提交的更新則會被撤消。
》contains (Object entity):
判斷一個實例是否屬于當前持久上下文環境管理的實體。
》isOpen ():
判斷當前的實體管理器是否是打開狀態。
》getTransaction ():
返回資源層的事務對象。EntityTransaction實例可以用于開始和提交多個事務。
》close ():
關閉實體管理器。之后若調用實體管理器實例的方法或其派生的查詢對象的方法都將拋出 IllegalstateException 異常,除了getTransaction 和 isOpen方法(返回 false)。不過,當與實體管理器關聯的事務處于活動狀態時,調用 close 方法后持久上下文將仍處于被管理狀態,直到事務完成。
》createQuery (String qlString):創建一個查詢對象。
》createNamedQuery (String name):根據命名的查詢語句塊創建查詢對象。參數為命名的查詢語句。
》createNativeQuery (String sqlString):使用標準 SQL語句創建查詢對象。參數為標準SQL語句字符串。
》createNativeQuery (String sqls, String resultSetMapping):使用標準SQL語句創建查詢對象,并指定返回結果集 Map的 名稱。
5.?avax.persistence.EntityTransaction:
EntityTransaction 接口用來管理資源層實體管理器的事務操作。通過調用實體管理器的EntityManager.getTransaction方法 獲得其實例。
》begin ()
用于啟動一個事務,此后的多個數據庫操作將作為整體被提交或撤消。若這時事務已啟動則會拋出 IllegalStateException 異常。
》commit ()
用于提交當前事務。即將事務啟動以后的所有數據庫更新操作持久化至數據庫中。
》rollback ()
撤消(回滾)當前事務。即撤消事務啟動后的所有數據庫更新操作,從而不對數據庫產生影響。
》setRollbackOnly ()
使當前事務只能被撤消。
》getRollbackOnly ()
查看當前事務是否設置了只能撤消標志。
》isActive ()
查看當前事務是否是活動的。如果返回true則不能調用begin方法,否則將拋出 IllegalStateException 異常;如果返回 false 則不能調用 commit、rollback、setRollbackOnly 及 getRollbackOnly 方法,否則將拋出 IllegalStateException 異常。
?
@Testpublic void testAdd() {//1.通過一個持久化單元獲取一個實體類的管理對象(SessionFactory)EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");//2.通過實體類的管理工廠創建一個新的實體類(Session)EntityManager manager = factory.createEntityManager();//3.實現數據的增加操作,一定要進行事務管理 manager.getTransaction().begin();//4.實例化po對象,設置相應的數據內容DeptEntity dept = new DeptEntity() ;dept.setDname("落花部門");dept.setLoc("流水國度");dept.setCreatedate(new Date());dept.setNum(10);dept.setAvgsal(1.1);// 5、進行持久層管理manager.persist(dept); // 增加成功之后并沒有返回值// 6、更新操作完成之后需要進行事務提交manager.getTransaction().commit(); // 提交事務// 7、關閉相應的數據庫連接控制 manager.close();factory.close();}?
轉載于:https://www.cnblogs.com/luliang888/p/11267406.html
總結
- 上一篇: Visual Studio 2008中常
- 下一篇: linux 普通用户登陆系统su - r