본문 바로가기

JavaFX

[JavaFX] 자바FX + Hibernate CRUD 데이터 저장, 삭제, 업데이트

JavaFX + HIbernate 로 데이터 저장, 삭제, 업데이트 CRUD 만들기

 

 

 

USER VO를 생성한다.

 

@Entity
@Table(name = "USER")
public class User {
  @Id
  @Column(name = "ID")
  private String id;
  @Column(name = "NAME")
  private String name;
}

 

 

Controller 구현

user 객체를 만들고 saveOrUpdateEntity로 저장, 업데이트

deleteEntity로 객체 삭제

 

public class Controller implements Initializable {
  private Dao dao;
  
  @Override
  public void initialize(Url location ResourceBundle resources){
    User user = new User();
    user.setId("1");
    user.setName("na");
    
    // 데이터 저장, 업데이트
    dao.saveOrUpdateEntity(user);
    dao.flushOrClear();
    
    // 데이터 삭제
    dao.deleteEntity(user);
    dao.flushOrClear();
  }
}

 

 

 

GenericDAO 인터페이스

 

public interface GenericDAO<T, ID extends Serializable> {
  T findById(ID id, boolean lock);
  
  List<T> findAll();
  
  List<T> findByExample(T exampleInstance, String... excludeProperty);
  
  T saveOrUpdateEntity(T entity);
  
  void deleteEntity(T entity);
  
  void flushOrClear();
  
}

 

 

 

GenericHiberntateDAO 구현

Dao가 Session을 주입할 수 있게 Session을 가져온다.

public abstract class GenericHibernateDAO<T, ID extends Serializable> implements GenericDAO<T, ID> {
  private Session session;
  private final Class<T> persistentClass;
  
  @SuppressWarnings("unchecked")
  public GenericHibernateDAO(){
    this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  }
  
  public void setSession(Session session){
    this.session = session;
  }
  
  protected Session getSession(){
    if(session == null){
      session = HibernateUtil.getSessionFactory().openSession();
    }
    
    return session;
  }
  
  public Class<T> getPersistentClass(){
    return persistentClass;
  }
  
  @Override
  public T saveOrUpdateEntity(T entity) {
    getSession().saveOrUpdate(entity);
    
    return entity;
  }
  
  @Override
  public void flushOrClear() {
    getSession().flush();
    getSession().clear();
  }
  
  @Override
  public void deleteEntity(T entity) {
    getSession().delete(entity);
  }
}

 

 

HibernateUtil 클래스

 

public class HibernateUtil {
  private static SessionFactory sessionFactory;
  
  static {
    try{
      Configuration configuration = new Configuration().configure();
      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
      sessionFactory = configuration.buildSessionFactory(builder.build());
    } catch(HibernateException e){
    
    }
  }
  
  public static SessionFactory getSessionFactory(){
    return sessionFactory;
  }
  
  public static void shutdown() {
    getSessionFactory().close();
  }
}