我希望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();
}Eclipse IDE for line List<UserEntity> list = UserDao.findAll();给出错误:对于类型UserDao,方法findAll()定义不足。
发布于 2016-04-13 17:15:57
这是我的实现:
GenericDao:
@Repository
public class GenericDao<T extends DbObject> {
@Autowired
private SessionFactory sessionFactory;
private Class<T> getParameterizedClass() {
return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public T findById(final Serializable id) {
return (T) getCurrentSession().get(getParameterizedClass(), id.toString());
}
public void persist(final T object) {
getCurrentSession().persist(object);
}
public void saveOrUpdate(final T object) {
getCurrentSession().saveOrUpdate(object);
}
public void delete(final T object) {
getCurrentSession().delete(object);
}
public T merge(final T object) {
return (T) getCurrentSession().merge(object);
}
}UserDao:
public class UserDao extends GenericDao<User> {
}实体:
@Entity
@Table(name = "...")
public class User extends DbObject {
}https://stackoverflow.com/questions/36591846
复制相似问题