Sadece işlemin başlatılması gibi tekrarlayan kodları kaldırmak istiyorum ve blok yakalamayı deneyin ve Hibernate sınıflarıma yazdım.Hazırda bekletme araçlarını kullanarak nasıl optimize edilir?
Bu benim PersonDao sınıftır
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();
}
}
}
Bu benim hazırda util sınıf
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;
}
}
benim dao sınıfını optimize nasıl bir öneriniz olduğunu. Teşekkür
Spring Framework'ü kullanacak mısınız? –
Herhangi bir çerçeve kullanmıyorum –
Bahar verisini JPA kullanarak boilerplate kodunun çoğundan sakınılabilirsin, bir göz atmanızı öneririm, [example] 'den birine link ver (http://www.springbyexample.org/ örnekler/yay veri JPA-repository.html) –