本来是想拿Spring整合Hibernate4的,事实证明我道行尚浅 未遂……
看到这个异常,且在用Hibernate4的同学就要考虑Hibernate的版本问题了
(解决完这个问题发现4里边把HibernateTemplate取消掉了,所以就没再死扣)。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ' XXXXX ': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in class path resource [applicationContext-common.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;
原来弄过spring+ibatis的整合,其实道理差不多
都是spring帮忙注入,OR框架去数据库中CRUD,仅有的一点区别就是ibatis的SQL是手动的,Hibernate的HQL是自动的,所以Hibernate要实体Student用Annotation声明一下
用Hibernate的方式,声明实体、表名、主键等。
工程里不再需要 hibernate.cfg.xml 了,在spring配置文件的:hibernateProperties标签里配置就行了
业务调用具体service时候,就需要其中聚合的DaoImpl,通过setter靠spring注入
@Resource(name="StudentDAOImpl01")指定注入的名字
(IDao就几个接口就不说了)
要把自己通过@Component("StudentDAOImpl01")准备好,等spring注入到上边的具体service里,靠名字识别
ibatis这里还要找到实体的配置文件,这里直接用HQL就行了,Hibernate会帮忙生成SQL语句
这用到:
hibernateTemplate.save(stu);
hibernateTemplate.delete(stu);
hibernateTemplate.update(stu);
(Student)hibernateTemplate.get(Student.class,new Integer(id));
hibernateTemplate.find(hql,name);
其中find里边直接写HQL就行了,需要传参的话可以第一参数是带占位符的String,后一个传值
1.JDBC配置
2.sessionFactory ,这里边要配上Hibernate.cfg.xml的内容
3.hibernateTemplate