我想编写抽象类,它将包含使用db的所有通用方法,如save,update等。然后创建尽可能多的DAO我需要的实现,并且,如果需要,覆盖/添加方法。
public interface Dao<T, ID extends Serializable> {
void save(T t);
T get(ID id);
void update(T t);
void remove(T t);
List<T> findAll();
}
@Repository
@Transactional
public abstract class AbstractDao<T, ID extends Serializable> implements Dao<T, ID> {
@Autowired
private SessionFactory sessionFactory;
private Class<T> clazz;
public AbstractDao(Class<T> clazz) {
this.clazz = clazz;
}
public void save(T t) {
sessionFactory.getCurrentSession().save(t);
}
public T get(ID id) {
return sessionFactory.getCurrentSession().get(clazz, id);
}
public void update(T t) {
sessionFactory.getCurrentSession().update(t);
}
public void remove(T t) {
sessionFactory.getCurrentSession().delete(t);
}
public List<T> findAll() {
return sessionFactory.getCurrentSession().createCriteria(clazz).list();
}
}
@Repository
@Transactional
public class UserDao extends AbstractDao<User, Integer> {
public UserDao() {
super(User.class);
}
}
public class MainTest {
@Test
public void testName() throws Exception {
ApplicationContext ctx = new AnnotationConfigApplicationContext(HibernateConfig.class);
UserDao userDao = ctx.getBean(UserDao.class);
...
}
}
我收到了这个错误:
No qualifying bean of type [com.sevak-avet.UserDao] is defined
如果我不使用AbstractDao类并直接在UserDao中实现所有方法,那么它可以工作。我做错了什么?