JPA所維護的核心是實體(Entity bean),而它是經過一個持久化上下文(Persistence Context)來使用的。spring
實體數據庫
關係緩存
EntityManager接口:是應用程序操縱持久化數據的接口,用於增刪改查app
EntityManager稱爲實體管理器,由EntityManagerFactory所建立框架
獲取EntityManager實例:ide
@PersistenceUnit EntityManagerFactory emf; EntityManager emf; @Resource UserTranscation utx; ... //經過EntityManagerFactory獲取EntityManager em=emf.createEntityManager(); try{ //事務開啓 utx.begin(); em.persist(SomeEntity); em.merge(AnotherEntity); em.remove(ThirdEntity); //事務提交 utx.commit(); }catch(Exception e){ utx.rollback(); }
查找實體:函數
@PersistenceContext EntityManager em; public void enterOrder(int custID,CustomerOrder newOrder){ Customer cust=em.find(Customer.class,CustID); cust.getOrders().add(newOrder); newOrder.setCustomer(cust); }
補充:間歇性忘記ORM,說明沒有理解ORM的思想,因此在此補充ORMpost
@NoRepositoryBean public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { <S extends T> S save(S entity);//保存 <S extends T> Iterable<S> save(Iterable<S> entities);//批量保存 T findOne(ID id);//根據id 查詢一個對象。返回對象自己,當對象不存在時,返回null Iterable<T> findAll();//查詢全部的對象 Iterable<T> findAll(Iterable<ID> ids);//根據id列表 查詢全部的對象 boolean exists(ID id);//根據id 判斷對象是否存在 long count();//計算對象的總個數 void delete(ID id);//根據id 刪除 void delete(T entity);//刪除一個對象 void delete(Iterable<? extends T> entities);//批量刪除,集合對象(後臺執行時,一條一條刪除) void deleteAll();//刪除全部 (後臺執行時,一條一條刪除) }
@NoRepositoryBean public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort sort);// 僅排序 Page<T> findAll(Pageable pageable);// 分頁和排序 }
@NoRepositoryBean public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> { List<T> findAll(); //查詢全部對象,返回List List<T> findAll(Sort sort); //查詢全部對象,並排序,返回List List<T> findAll(Iterable<ID> ids); //根據id列表 查詢全部的對象,返回List void flush(); //強制緩存與數據庫同步 <S extends T> List<S> save(Iterable<S> entities); //批量保存,並返回對象List <S extends T> S saveAndFlush(S entity); //保存並強制同步數據庫 void deleteInBatch(Iterable<T> entities); //批量刪除 集合對象(後臺執行時,生成一條語句執行,用多個or條件) void deleteAllInBatch();//刪除全部 (執行一條語句,如:delete from user) T getOne(ID id); //根據id 查詢一個對象,返回對象的引用(區別於findOne)。當對象不存時,返回引用不是null,但各個屬性值是null @Override <S extends T> List<S> findAll(Example<S> example); //根據實例查詢 @Override <S extends T> List<S> findAll(Example<S> example, Sort sort);//根據實例查詢,並排序。 }