JavaFX CRUD
JavaFX에서 Hibernate를 사용하여 CRUD의 조회, 저장 삭제하는 방법을 알아보자.
- 데이터 조회
- 데이터 저장
- 데이터 삭제
Hibernate 세션 설정
커넥션 정보를 담고 있는 configuration으로 부터 정보를 가져와 sessionFactory를 생성한다.
SessionFactory 를 하나의 인스턴스만 생성되서 사용하기 위해 아래와 같이 코딩한다.
하이버네이트로 저장, 삭제, 조회 할때 sessionFactory를 사용하게 된다.
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch(HibernateException e) {
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public void shutdown() {
sessionFactory.close();
}
}
데이터 조회하기
Query를 사용하여 User 객체를 조회한다.
페이징을 하기 setFirstResult와 setMaxResults 를 사용하였다.
- setFirstResult : 조회 시작 위치이다. 기본 0으로 시작한다.
- setMaxResults : 조회할 데이터의 갯수이다.
setFirstResult(0), setMaxResults(10) 은 0번째 데이터에서 10개의 데이터를 조회
setFirstResult(10), setMaxResults(10) 은 10번째 데이터에서 10개의 데이터를 조회
List<User> users;
users = dao.getUserList();
/* 사용자 목록 조회 */
public List<User> getUserList() {
String hql = " FROM User order by id";
Query query = getSession().createQuery(hql);
query.setFirstResult(0);
query.setMaxResults(10);
return query.list();
}
데이터 저장하기
데이터 저장 시 Transaction을 사용하여 데이터를 저장 후 commit() 했다.
객체와 디비의 컬럼의 값이 똑같이 매핑되어 있으면 save(user) 만으로 저장이 가능하다.
insert... 문 없이 쉽게 저장이 가능하다는게 하이버네이트만의 장점인듯 하다.
User user = new User();
user.setUserId("0001");
user.setUserName("oh");
dao.saveUser(user);
/* 사용자 저장 */
public void saveUser(User user) {
Transaction tx = getSession().beginTransaction();
Query query = getSession().createQuery(" FROM User");
getSession().save(user);
tx.commit();
}
@Transient 로 예외처리
개발을 하다보면 예외의 상황이 발생한다.
DB와 객체간의 매핑이 다를수도 있다.
예를들어 DB에는 없는 컬럼이지만 로직상 객체에 Msg 객체 또는 Button 객체의 정보를 담아야 될수도 있을 것이다.
이럴 경우 하이버네이트에 오류가 발생한다.
Msg, Button을 DB에서 찾지 못해 오류가 발생하는 것 같다.
이럴 경우 @Transient 애노테이션을 사용하면 해당 객체는 예외처리를 하는 것 같다.
@Entity
public class User {
...
@Transient
private Msg msg;
@Transient
private Button btn;
}
데이터 삭제하기
테이블 전체삭제가 아니라면 삭제시 데이터를 파라미터로 넘겨야 한다.
하이버네이트에서 삭제하려면 쿼리에 변수를 [ :변수명 ] 으로 쿼리를 작성하고
파라미터에 setParameter(변수명, 값); 으로 파라미터를 넘긴다.
query.executeUpdate()로 실행 쿼리의 결과를 int로 반환해준다.
int rowCount = dao.deleteUser("0001");
/* 사용자 삭제 */
public int deleteUser(String id) {
Transaction tx = getSession().beginTransaction();
String hql = " DELETE FROM User WHERE id = :id";
Query query = getSession().createQuery(hql);
query = getSession().createQuery(hql.toString()).setParameter("id", id);
rowCount = query.executeUpdate();
tx.commit();
return rowCount;
}
'JavaFX' 카테고리의 다른 글
[JavaFX] JavaFX cannot set style once stage has been set visible 에러 (0) | 2020.04.13 |
---|---|
[JavaFX] JavaFX Hibernate log4j 설정 - SQL 파라미터 값 보기 (0) | 2020.04.07 |
[JavaFX] JavaFX 새 팝업창에 Parameter 데이터 전송 (0) | 2020.04.02 |
[JavaFX] JavaFX Popup 새 팝업창 띄우기 (0) | 2020.04.02 |
[JavaFX] JavaFX ComboBox 데이터 추가 변경 이벤트 (0) | 2020.04.01 |