Как уменьшить код биологической пластины в моей реализации на основе гибернации? - PullRequest
0 голосов
/ 07 марта 2019

Я написал реализацию на основе 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;
    }

}

1 Ответ

0 голосов
/ 07 марта 2019

если бы вы могли использовать Java 8, это могло бы выглядеть так:

private static <OUTPUT> OUTPUT runInTransaction(Function<Session, OUTPUT> function) {
    Transaction tx = null;
    try (Session session = HibernateUtil.openSession()) {
        tx = session.beginTransaction();
        final OUTPUT result = function.apply(session);
        session.getTransaction().commit();
        return result;
    } catch (Exception e) {
        if (tx != null) {
            tx.rollback();
        }
        e.printStackTrace();
        return null;
    }
}

, а затем:

runInTransaction(session -> {
    return session.get(Sports.class, sportsId);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...