본문 바로가기
JAVA

[JPA] 하이버네이트(Hibernate) CRUD 간단 정리

by GoodDayDeveloper 2022. 9. 23.
반응형

 

오늘은 JPA중, 하이버네이트의 CRUD

즉, 등록(create)  / 상세보기(read)  / 업데이트(update) / 삭제(delete) 를 정리해보겠습니다.

그전에 JPA와  하이버네이트를 간단히 알아보도록 하죠.

 

 

JPA(Java Persistence API)는 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스입니다.

여기서 중요한 부분은 인터페이스란 점이고,

따라서 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용해야하는지를 정의한 방법이라 말할 수 있습니다.

 

 

Hibernate는 '자바 언어를 위한 객체 관계 매핑 프레임워크' 라고 사전적 의미가 있지만,

쉽게 말해서 JPA란 인터페이스의 구현체라고 보시면 됩니다.

Hibernate와 같은 종류의 구현체는 DataNucleus, EclipseLink 등이 있습니다.

 

 

이젠 Hibernate를 이용한 CRUD 방법에 대해 정리해보겠습니다.

(전자정부프레임워크 기준으로 정리해보았습니다.)

 

 

 

 

 

 

 

생성

 

 

1
2
3
4
5
@Repository("PetHqlDAO")
public class PetHqlDAO  extends CHibernateDaoSupport{
    
    
}
cs

 

클래스를 생성시켜줍니다.

중요한 부분은 Repository에 dao를 선언해주고

CHibernateDaoSupport를 extends 시켜줍니다.

 

 

 

 

 

 

LIST 및 조건문

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public DetachedCriteria setSearchCriteria(DetachedCriteria query, tbl_pet_biVO searchVO){
        
    if(StringUtils.isNotEmpty(searchVO.getSearchWrd())) query.add(Restrictions.like("name""%"+searchVO.getSearchWrd()+"%"));
 
    //아래와 같이 eq를 사용할 수 있습니다.
    //if(StringUtils.isNotEmpty(searchVO.getSearchCode())) query.add(Restrictions.eq("code", searchVO.getSearchCode()));
    
    return query;
}
    
@SuppressWarnings({ "unchecked""unchecked" })
public List<tbl_pet_biVO> getBasicList(tbl_pet_biVO searchVO) {
    
    List<tbl_pet_biVO> list = new ArrayList<tbl_pet_biVO>();
    DetachedCriteria query  = DetachedCriteria.forClass(tbl_pet_biVO.class , "vo").add(Restrictions.eq("del_yn""N"));
    query = setSearchCriteria(query, searchVO);        
    query.addOrder(Order.desc("bi_idx"));  
 
    list = (List<tbl_pet_biVO>) getHibernateTemplate().findByCriteria(query,searchVO.getFirstIndex(),searchVO.getRecordCountPerPage());  
    return list;
    
}
 
public int getBasicListCnt(tbl_pet_biVO searchVO) {
    
    int cnt=0;
    DetachedCriteria query  = DetachedCriteria.forClass(tbl_pet_biVO.class , "vo").add(Restrictions.eq("del_yn""N"));
    query.setProjection(Projections.rowCount());
    query = setSearchCriteria(query, searchVO);
 
    List<?> list = getHibernateTemplate().findByCriteria(query);
    cnt = Integer.parseInt(String.valueOf(list.get(0)));
 
    return cnt;
    
}
cs

 

리스트와 리스트 갯수를 필요로하는 리스트 페이지의 DAO입니다.

여기서는 공통적으로 DetachedCriteria를 이용하여 쿼리의 조건문을 적용시켜주고,

setProjection의 메서드를 이용하여 검색 조건문을 다시 한번 추가시켜줬습니다.

 

그리고 ArrayList에 getHibernateTemplate().findByCriteria()에 파라미터를 담아 

return하는 형식입니다.

 

 

 

 

 

 

CREATE (생성)

 

 

1
2
3
public void insertBasicVO(tbl_pet_biVO searchVO) {
    getHibernateTemplate().save(searchVO);
}
cs

 

getHibernateTemplate().save()에 객체 파라미터를 넣어주기만 하면 저장할 수 있습니다.

 

 

 

 

 

반응형

 

 

 

 

 

READ (조회)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
@SuppressWarnings("unchecked")
public tbl_pet_biVO getBasicInfo(tbl_pet_biVO searchVO) {
    DetachedCriteria query  = DetachedCriteria.forClass(tbl_pet_biVO.class , "vo").add(Restrictions.eq("del_yn""N"));
    query.add(Restrictions.eq("bi_idx", searchVO.getBi_idx()));
 
 
    List<tbl_pet_biVO> list = (List<tbl_pet_biVO>) getHibernateTemplate().findByCriteria(query);
    tbl_pet_biVO vo = list.get(0);
 
    return vo;
    
}
cs

 

리스트와 마찬가지로 DetachedCriteria를 이용하여 쿼리의 조건문을 적용시켜주고,

ArraryList에 리스트를 넣어준 다음, vo에 리스트의 0번째 값을 넣어줘서 리턴해줍니다.

어짜피 리스트에는 배열이 하나밖에 없기 때문이죠.

 

 

 

 

 

UPDATE (업데이트)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void updateBasicVO(tbl_pet_biVO searchVO) {
tbl_pet_biVO vo = getBasicInfo(searchVO);
    
    vo.setBi_biz(searchVO.getBi_biz());
    vo.setBi_asgmt(searchVO.getBi_asgmt());
    vo.setBi_breed(searchVO.getBi_breed());
    vo.setBi_species(searchVO.getBi_species());
    vo.setBi_bday(searchVO.getBi_bday());
    vo.setBi_gender(searchVO.getBi_gender());
    vo.setBi_presv(searchVO.getBi_presv());
    vo.setBi_source(searchVO.getBi_source());
    vo.setBi_abode(searchVO.getBi_abode());
    vo.setBi_bredg_env(searchVO.getBi_bredg_env());
    vo.setBi_chip(searchVO.getBi_chip());
    
    getHibernateTemplate().clear();
    getHibernateTemplate().update(vo);
    
}
cs

 

조회에서 사용하였던 getBasicInfo 메서드를 활용하여 vo정보를 가지고 옵니다.

vo에 정보를 담아준 다음, 그 정보를 지우고 다시 업데이트하는 구조입니다.

 

 

 

 

 

 

삭제(DELETE)

 

 

1
2
3
4
5
public void deleteBasicVO(tbl_pet_biVO searchVO) {
    tbl_pet_biVO vo = getBasicInfo(searchVO);
    getHibernateTemplate().remove(vo);
    
}
cs

 

저장과 마찬가지로 getHibernateTemplate()를 이용하는데 save가 아닌 remove를 이용하여

객체를 넣어주면 삭제가 완료됩니다.

 

 

 

 

 

 

 

전체소스

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
@Repository("PetHqlDAO")
public class PetHqlDAO  extends CHibernateDaoSupport{
    
    //검색 where
    public DetachedCriteria setSearchCriteria(DetachedCriteria query, tbl_pet_biVO searchVO){
        
        if(StringUtils.isNotEmpty(searchVO.getSearchWrd())) query.add(Restrictions.like("name""%"+searchVO.getSearchWrd()+"%"));
 
//        if(StringUtils.isNotEmpty(searchVO.getSearchMeType())) query.add(Restrictions.eq("type", searchVO.getSearchMeType()));
        
        return query;
    }
        
 
    
 
    @SuppressWarnings({ "unchecked""unchecked" })
    public List<tbl_pet_biVO> getBasicList(tbl_pet_biVO searchVO) {
        
        List<tbl_pet_biVO> list = new ArrayList<tbl_pet_biVO>();
        DetachedCriteria query  = DetachedCriteria.forClass(tbl_pet_biVO.class , "vo").add(Restrictions.eq("del_yn""N"));
        query = setSearchCriteria(query, searchVO);        
        query.addOrder(Order.desc("bi_idx"));  
 
        list = (List<tbl_pet_biVO>) getHibernateTemplate().findByCriteria(query,searchVO.getFirstIndex(),searchVO.getRecordCountPerPage());  
        return list;
        
    }
 
    public int getBasicListCnt(tbl_pet_biVO searchVO) {
        
        int cnt=0;
        DetachedCriteria query  = DetachedCriteria.forClass(MemberVO.class , "vo").add(Restrictions.eq("del_yn""N"));
        query.setProjection(Projections.rowCount());
        query = setSearchCriteria(query, searchVO);
 
        List<?> list = getHibernateTemplate().findByCriteria(query);
        cnt = Integer.parseInt(String.valueOf(list.get(0)));
 
        return cnt;
        
    }
 
 
    public void insertBasicVO(tbl_pet_biVO searchVO) {
        getHibernateTemplate().save(searchVO);
    }
 
 
 
    @SuppressWarnings("unchecked")
    public tbl_pet_biVO getBasicInfo(tbl_pet_biVO searchVO) {
        DetachedCriteria query  = DetachedCriteria.forClass(tbl_pet_biVO.class , "vo").add(Restrictions.eq("del_yn""N"));
        query.add(Restrictions.eq("bi_idx", searchVO.getBi_idx()));
 
 
        List<tbl_pet_biVO> list = (List<tbl_pet_biVO>) getHibernateTemplate().findByCriteria(query);
        tbl_pet_biVO vo = list.get(0);
 
        return vo;
        
    }
 
 
    public void updateBasicVO(tbl_pet_biVO searchVO) {
        tbl_pet_biVO vo = getBasicInfo(searchVO);
        
        vo.setBi_biz(searchVO.getBi_biz());
        vo.setBi_asgmt(searchVO.getBi_asgmt());
        vo.setBi_breed(searchVO.getBi_breed());
        vo.setBi_species(searchVO.getBi_species());
        vo.setBi_bday(searchVO.getBi_bday());
        vo.setBi_gender(searchVO.getBi_gender());
 
        
        getHibernateTemplate().clear();
        getHibernateTemplate().update(vo);
        
    }
 
 
    public void deleteBasicVO(tbl_pet_biVO searchVO) {
        tbl_pet_biVO vo = getBasicInfo(searchVO);
        getHibernateTemplate().remove(vo);
        
    }
 
 
    
}
cs

 

 

 

반응형

댓글