使用存储库设计模式(我目前已经理解的),您拥有每个业务模型的存储库。所有这些存储库都实现了一个IRepository接口:
public interface IRepository<T> {
boolean add(T item);
boolean update(T item);
boolean remove(T item);
List<T> query(Specification specification);
}
使用Hibernate,我以这种方式保存新记录:
try{
tx = session.beginTransaction();
session.save(mappedObject);
tx.commit();
}
catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
}
finally {
session.close();
}
每个存储库是否基本上都与add方法重复?那么用一个已定义的添加方法等制作一个Repository类会不会更好?
答案 0 :(得分:1)
我建议您创建一个AbstractRepository
实现,为共享的公共方法实现IRepository
接口,然后从抽象类扩展业务存储库实现。
public abstract class AbstractRepository<T> implements IRepository<T> {
@Override
public T add(T object) {
Session session = openSession();
try {
session.getTransaction().begin();
session.save( object );
session.getTransaction().commit();
return object;
}
catch ( Exception e ) {
if ( session.getTransaction().getStatus() == TransactionStatus.ACTIVE ) {
session.getTransaction().rollback();
}
throw e;
}
finally {
session.close();
}
}
}