1
トランザクションの初期化のような反復コードを削除し、catchブロックを試してHibernate utilクラスに入れたいだけです。hibernate utilを使ってDAOを最適化するには?
これはこれは私が私のDAOクラスを最適化する方法任意の提案
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
私の休止状態utilのクラスで私のPersonDaoクラス
public class PersonDao {
public List<Person> getAllPersons(){
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
List<Person> persons = new ArrayList<>();
try{
tx = session.beginTransaction();
Criteria cr = null;
cr = session.createCriteria(Person.class);
persons = cr.list();
}catch (RuntimeException e) {
e.printStackTrace();
}finally {
session.close();
}
return persons;
}
public Person getPersonById(int id) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
Person person = null;
try{
tx = session.beginTransaction();
String hql = "from Person where id = :id";
Query query = session.createQuery(hql);
query.setParameter("id",id);
person = (Person) query.uniqueResult();
}catch(RuntimeException e){
e.printStackTrace();
}finally{
session.close();
}
return person;
}
public List<Person> getPersonByRole(String role){
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
List<Person> persons = new ArrayList<>();
try{
tx = session.beginTransaction();
String hql = "from Person where role = :role";
Query query = session.createQuery(hql);
query.setParameter("role",role);
persons = query.list();
}catch(RuntimeException e){
e.printStackTrace();
}finally{
session.close();
}
return persons;
}
public void addPerson(Person person){
Transaction transaction = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try{
transaction = session.beginTransaction();
session.save(person);
session.getTransaction().commit();
}catch(RuntimeException e){
if(transaction != null){
transaction.rollback();
}
e.printStackTrace();
}finally{
session.close();
}
}
public void updatePerson(Person person){
Transaction transaction = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try{
transaction = session.beginTransaction();
session.update(person);
session.getTransaction().commit();
}catch(RuntimeException e){
if(transaction != null){
transaction.rollback();
}
e.printStackTrace();
}finally{
session.close();
}
}
public void deletePerson(int id){
Transaction transaction = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try{
transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, id);
session.delete(person);
session.getTransaction().commit();
}catch(RuntimeException e){
if(transaction != null){
transaction.rollback();
}
e.printStackTrace();
}finally{
session.close();
}
}
}
です。おかげ
Spring Frameworkを使用しますか? –
フレームワークを使用していません –
スプリングデータJPAを使用して定型コードをたくさん避けることができます。見てみることを強くお勧めします。[example](http://www.springbyexample.org/ examples/spring-data-jpa-repository.html) –