JPA 간단한 첨삭 수정
5020 단어 JPA
JPA의 첨삭 수정
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();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)
이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다.
이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다.
이번에는 그 N+1 문제를 해결해 볼 것이다.
위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
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();
}
}
//
@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();
}
}
@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();
}
}
//
@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
@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();
}
}
//
@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();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.