在上一个示例的基础上,增加了Generic接口及其实现类,以实现反省多态(泛型)
需求分析:
1、使用spring注入dataSourse数据源
2、使用BaseDao获取注入SessionFactory并返回Session
3、用generic接口及其实现类,实现泛型化的查询所有和按字符串查询的方法
4、使用JUNIT测试
【配套的资源代码已经上传,有兴趣的朋友可以下载看看点击打开资源链接】
操作步骤:(其中关于applicationContext.xml配置文件的内容参考上一篇)
1、创建IGenericDao及其实现类
public interface IGenericDao<T,PK extends Serializable> {
public List<T> findAll(String sql,final Object...args);
public T getById(PK id);
}
public class GenericDao<T,PK extends Serializable> extends HibernateDaoSupport implements IGenericDao<T, PK> {
private Class<?> clazz;
GenericDao(){
clazz=(Class<T>) ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
@Resource
public void setSuperSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
@Override
public T getById(PK id) {
// TODO Auto-generated method stub
return (T)this.getSession().get(clazz, id);
}
@Override
public List<T> findAll(String sql, Object... args) {
Query query = this.getSession().createQuery(sql);
if(args!=null){
for(int i=0;i<args.length;i++){
query.setParameter(i, args[i]);
}
}
return query.list();
}
}
2、修改IUserDao及其实现类
public interface IUserDao extends IGenericDao<User, Integer>{
}
@Repository("userDao")
public class UserDao extends GenericDao<User, Integer> implements IUserDao{
}
其他神马都没变,测试结果同上一篇。
关于GenericDao的笔记,以后会整理好放上来。这个真的很好用。