hibernate - Spring Boot 通用 DAO
问题描述
我正在使用 Spring Boot 和 Jersey 构建的宁静 Web 服务应用程序中实现通用 dao 层。我有一些相同的资源控制器,所以为了避免重复相同的方法,我想创建一个 GenericControllers 或 GenericResources 控制器。在这些控制器中注入 genericDao 时我遇到了问题。对于这些通用资源,我不需要特定的服务。
public interface IGenericDAO<T extends Serializable> {
T findOne(final Integer id);
List<T> findAll();
T create(final T entity);
void update(final T entity);
void delete(final T entity);
void deleteById(final Integer id);
}
public abstract class AbstractGenericDAO<T extends Serializable> implements IGenericDAO<T> {
private final Class<T> clazz;
@SuppressWarnings("unchecked")
public AbstractGenericDAO() {
this.clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
/**
* getSession() from EntityManager which is already configured in spring-boot-starter-data-jpa.
* We inject EntityManager instead of SessionFactory
*/
@Autowired
private EntityManager entityManager;
protected Session getCurrentSession() {
return this.entityManager.unwrap(Session.class);
}
@Override
public T findOne(Integer id) {
// TODO Auto-generated method stub
return (T) getCurrentSession().get(this.clazz, id);
}
@Override
public List<T> findAll() {
// TODO Auto-generated method stub
CriteriaQuery<T> cq = getCurrentSession().getCriteriaBuilder().createQuery(this.clazz);
cq.from(this.clazz);
return getCurrentSession().createQuery(cq).getResultList();
}
@SuppressWarnings("unchecked")
@Override
public T create(T entity) {
// TODO Auto-generated method stub
return ((T) getCurrentSession().save(entity));
}
@Override
public void update(T entity) {
// TODO Auto-generated method stub
getCurrentSession().saveOrUpdate(entity);
}
@Override
public void delete(T entity) {
// TODO Auto-generated method stub
getCurrentSession().delete(entity);
}
@Override
public void deleteById(Integer id) {
// TODO Auto-generated method stub
T entity = this.findOne(id);
this.delete(entity);
}
}
这是我的问题。我想要这里的泛型资源:
public class GenericResource<T extends Serializable> extends AbstractGenericDAO<T> {
/*@GET
@Secured({"ROLE_ADMIN"})
public Response list() {
return Response.ok().entity(dao.findAll()).build();
}*/
}
解决方案
推荐阅读
- react-native - Force change app language without restart
- javascript - 同一页面内同一表单的多个副本会混淆复选框单击
- python - 使用 Matlplotlib 的条形图
- javascript - 无法在 javascript 中旋转 div
- reactjs - React Hooks:使用 axios 拦截器显示全局微调器?
- windows - 如何使用 Autohotkey 编辑注册表值?
- r - 如何删除r中数字变量的某些数字
- python - 分隔符字符串拆分
- datatable - 如何解决“未处理的承诺拒绝:错误:无法找到 ID 为模块:aurelia-bootstrap-datetimepicker”的问题?
- java - 如何将一个地图中的 K 和另一个地图中的 V 写入一个文件?