JPA 간단한 첨삭 수정

5020 단어 JPA

JPA의 첨삭 수정

  • JPA에 대한 도구 클래스 JPAUtil
  • 만들기
  • 증가:persist
  • 변경:merge
  • 삭제:remove
  • id에 따라 조회
  • 조회 실체의 캐시 문제
  • 지연 로드가 있는 쿼리
  • JPA에 대한 도구 클래스 JPAUtil 작성


    Entity Manager Factory는 하나의 라인 안전 대상(즉 여러 라인이 같은 Entity Manager Factory 대상에 접근하면 라인 안전 문제가 없을 것이다)이고 Entity Manager Factory의 창설은 자원을 매우 낭비하기 때문에 JPA프로그래밍을 할 때 우리는 Entity Manager Factory의 창설을 최적화할 수 있다. 한 공정에 Entity Manager Factory만 존재하면 된다.
    package com.wuxudong.utils;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    
    public class JPAUtils {
    
        private static EntityManagerFactory factory;
    
        static {
            factory= Persistence.createEntityManagerFactory("myJPA");
        }
    
        public static EntityManager getEntityManager(){
           return factory.createEntityManager();
        }
    }
    

    증가:persist

    // 
        @Test
        public void testPersist(){
            // 
            Customer customer=new Customer();
            customer.setCustName(" ");
            customer.setCustLevel("VIP");
            customer.setCustAddress(" ");
    
            EntityManager em=null;
            EntityTransaction entityTransaction=null;
            try{
                em=JPAUtils.getEntityManager();
                entityTransaction=em.getTransaction();
                entityTransaction.begin();
                em.persist(customer);
                entityTransaction.commit();
            }catch (Exception e){
                entityTransaction.rollback();
                e.printStackTrace();
            }finally {
                em.close();
    
            }
        }
    

    변경:merge

     @Test
        public void mergeTest(){
    
            EntityManager em=null;
            EntityTransaction entityTransaction=null;
            try {
                em=JPAUtils.getEntityManager();
                entityTransaction=em.getTransaction();
                entityTransaction.begin();
                Customer customer= em.find(Customer.class,1l);
                customer.setCustName("ahfaa");
                em.clear();// customer 
                em.merge(customer);
                entityTransaction.commit();
    
            }catch (Exception e){
                entityTransaction.rollback();
                e.printStackTrace();
            }finally {
                em.close();
            }
    
    
        }
    
    

    삭제:remove

     // 
        @Test
        public void deleteTest(){
            EntityManager em=null;
            EntityTransaction entityTransaction=null;
    
            try {
                em=JPAUtils.getEntityManager();
                entityTransaction=em.getTransaction();
                entityTransaction.begin();
                Customer customer = em.find(Customer.class,2l);
                em.remove(customer);
                entityTransaction.commit();
            }catch (Exception e){
                entityTransaction.rollback();
                e.printStackTrace();
            }finally {
                em.close();
            }
        }
    

    id 기반 검색

     // : id 
        @Test
        public void testFindById(){
            EntityManager em=null;
            EntityTransaction entityTransaction=null;
    
            try {
                em=JPAUtils.getEntityManager();
                entityTransaction=em.getTransaction();
                entityTransaction.begin();
                Customer customer=em.find(Customer.class,1L);
                System.out.println(customer);
                entityTransaction.commit();
            }catch (Exception e){
                entityTransaction.rollback();
                e.printStackTrace();
            }finally {
                em.close();
            }
        }
    

    조회 실체의 캐시 문제


    Entity Manager에 캐시가 있습니다.
    
        // 
        @Test
        public void testGetOne(){
            // 
            EntityManager em=null;
            EntityTransaction entityTransaction=null;
    
            try {
                // 
                em=JPAUtils.getEntityManager();
                entityTransaction=em.getTransaction();
                entityTransaction.begin();
                Customer c1=em.find(Customer.class,1l);
                Customer c2=em.find(Customer.class,1l);
                System.out.println(c1==c2);//true,EntityManager 
                entityTransaction.commit();
    
            }catch (Exception e){
                entityTransaction.rollback();
                e.printStackTrace();
            }finally {
                em.close();
            }
    
        }
    

    지연 로드가 있는 질의

     @Test
        public void testLoadOne(){
            // 
            EntityManager em=null;
            EntityTransaction entityTransaction=null;
            try {
                em=JPAUtils.getEntityManager();
                entityTransaction=em.getTransaction();
                entityTransaction.begin();
    
                Customer c1=em.getReference(Customer.class,1l);
                entityTransaction.commit();
                System.out.println(c1);
            }catch (Exception e){
               entityTransaction.rollback();
                e.printStackTrace();
            }finally {
                em.close();
            }
    
        }
    

    좋은 웹페이지 즐겨찾기