【发布时间】:2016-04-13 07:48:03
【问题描述】:
我希望 UserDao 类扩展 GenericDAO,我将在其中拥有所有 CRUD 方法。我已阅读 IBM 的文章:http://www.ibm.com/developerworks/java/library/j-genericdao/index.html,但我无法实现它。有人可以根据我的自定义 UserDao 类向我展示示例吗?
@Transactional(value="myTransactionManager")
public class UserDao {
@Qualifier("mySessionFactory")
public SessionFactoryImpl sessionFactory;
public void setSessionFactory(SessionFactoryImpl sessionFactory) {
this.sessionFactory = sessionFactory;
}
public List<UserEntity> getAll() {
Query query = sessionFactory.getCurrentSession().createQuery(
"from UserEntity ");
List<UserEntity> userList = query.list();
return userList;
}
public void updaet(UserEntity userEntity) {
sessionFactory.getCurrentSession().update(userEntity);
}
public void delete(UserEntity userEntity) {
sessionFactory.getCurrentSession().delete(userEntity);
}
public void save(UserEntity userEntity) {
sessionFactory.getCurrentSession().save(userEntity);
}
}
我试着写这样的课
public class GenericDao{
@Qualifier("mySessionFactory")
public SessionFactoryImpl sessionFactory;
public void setSessionFactory(SessionFactoryImpl sessionFactory) {
this.sessionFactory = sessionFactory;
}
public <T> List<T> getAll(Class<T> t) {
Query query = sessionFactory.getCurrentSession().createQuery(
"from " + t.getName());
List<T> list = query.list();
return list;
}
public <T> void save(T t) {
sessionFactory.getCurrentSession().save(t);
}
public <T> void update(T t) {
sessionFactory.getCurrentSession().update(t);
}
public <T> void delete(T t) {
sessionFactory.getCurrentSession().delete(t);
}
}
但是当我尝试像这样使用 UserDao 提取数据时:
public List<UserEntity> getAll() {
List<UserEntity> list = UserDao.findAll();
}
List<UserEntity> list = UserDao.findAll(); 行的 Eclipse IDE 给出错误:方法 findAll() 对于 UserDao 类型的定义不足。
【问题讨论】:
-
你需要将类型传递给GenericDao,
GenericDao<T>并扩展它,显然...... -
UserDao不扩展GenericDao您没有将泛型添加到类定义中。GenericDao <T, PK extends Serializable> -
UserDao 在描述中没有扩展 GenericDao。但是当我扩展它时,它会给出描述的错误。