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);//根据实例查询,并排序。 }