Я написал реализацию на основе hibernate для одного из моих интерфейсов dao, но теперь я понимаю, что существует множество повторяющихся кодов, таких как открытие сеанса, начало транзакции, фиксация и откат, каждый метод имеет одинаковый код,я хочу знать, где я могу сохранить это в одном месте, я слышал о чем-то под названием AbstractDao, но как эта концепция подходит здесь, действительно ли она работает, я хочу уменьшить код котельной плиты.
здесьмой фрагмент класса реализации
package com.javarnd.cip.dao;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.javarnd.cip.db.HibernateUtil;
import com.javarnd.cip.model.Sports;
public class SportsDaoImpl implements SportsDao {
public void save(Sports sports) {
Session session = HibernateUtil.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(sports);
session.getTransaction().commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}
public List<Sports> findAll() {
Session session = HibernateUtil.openSession();
Transaction tx = null;
List<Sports> sportsList = new ArrayList<>();
try {
tx = session.beginTransaction();
sportsList = session.createQuery("FROM Sports", Sports.class).list();
session.getTransaction().commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
return null;
}
e.printStackTrace();
} finally {
session.close();
}
return sportsList;
}
public void update(Sports sports) {
Session session = HibernateUtil.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Sports sportsData = session.get(Sports.class, sports.getSportId());
sportsData.setName(sports.getName());
session.getTransaction().commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}
public void delete(Sports sports) {
Session session = HibernateUtil.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Sports sportsData = session.get(Sports.class, sports.getSportId());
session.delete(sportsData);
session.getTransaction().commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}
@Override
public Sports findById(long sportsId) {
Session session = HibernateUtil.openSession();
Transaction tx = null;
Sports sportsData = null;
try {
tx = session.beginTransaction();
sportsData = session.get(Sports.class, sportsId);
session.getTransaction().commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
return sportsData;
}
}