Spring3整合Hibernate3.6之一:简单CRUD
来源:互联网 发布:淘宝助理天猫版本 编辑:程序博客网 时间:2024/06/01 10:20
本来是想拿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声明一下
一:model
用Hibernate的方式,声明实体、表名、主键等。
工程里不再需要 hibernate.cfg.xml 了,在spring配置文件的:hibernateProperties标签里配置就行了
@Entity//测试程序里唯一一个实体@Table(name="t_student")//指定表名t_studentpublic class Student {private int studentid;private String name;private int age;public String toString(){return " id=>"+studentid+" name=>"+name+" age=>"+age;}//setter&getter@Id//主键@GeneratedValue//自增长public int getStudentid() {return studentid;}
二:具体service
业务调用具体service时候,就需要其中聚合的DaoImpl,通过setter靠spring注入
@Resource(name="StudentDAOImpl01")指定注入的名字
@Component("StudentService")//组件public class StudentService {//下边的setter定义了将要注入的实例private IStudentDAO studentDAO; public void add(Student stu) {//test调用这个add方法studentDAO.addStudent(stu);}public List<Student> getAll() {return studentDAO.selectAll();}public void delById(int id) {studentDAO.delStudentById(id);}public void updateStudent(Student stu) {studentDAO.updateStudent(stu);}public List<Student> selectByName(String name) {return studentDAO.selectStudentByName(name);}//setter&getterpublic IStudentDAO getStudentDAO() {return studentDAO;}@Resource(name="StudentDAOImpl01")//等StudentDAOImpl的注入public void setStudentDAO(IStudentDAO studentDAO) {this.studentDAO = studentDAO;}/*其他注入方式*/}
三:DaoImpl
(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,后一个传值
@Component("StudentDAOImpl01")//会作为组件,注入到servise里public class StudentDAOImpl implements IStudentDAO{private HibernateTemplate hibernateTemplate;public HibernateTemplate getHibernateTemplate() {return hibernateTemplate;}@Resource//等待spring配置文件里配的hibernateTemplate注入public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;}//下边是HQL的具体实现@Overridepublic void addStudent(Student stu) {//不指定id就能自动BySequencehibernateTemplate.save(stu);System.out.println("插入时返回的对象=》"+stu.getStudentid());//打印返回的值}@Overridepublic void delStudentById(int id) {//应该先select检查一下Student stu = hibernateTemplate.load(Student.class,new Integer(id)); hibernateTemplate.delete(stu);}@Overridepublic void updateStudent(Student stu) {hibernateTemplate.update(stu);}@Overridepublic Student selectStudentById(int id) {Student stu = new Student();stu = (Student)hibernateTemplate.get(Student.class,new Integer(id)); return stu;}@Overridepublic List<Student> selectStudentByName(String name) {String hql = "from Student t where t.name IN ?";List<Student> stus = new ArrayList<Student>();stus = (List<Student>)hibernateTemplate.find(hql,name); return stus;}@Overridepublic List<Student> selectAll() {List<Student> stus = new ArrayList<Student>();stus = (List<Student>)hibernateTemplate.find("from Student");return stus;}}
四:spring的配置文件
1.JDBC配置
2.sessionFactory ,这里边要配上Hibernate.cfg.xml的内容
3.hibernateTemplate
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"><context:annotation-config /><context:component-scan base-package="com.rt" /> <!-- 1.JDBC配置:dataSource --><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!-- 2.sessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><!-- hibernate具体配置,分项写在下边 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><!-- 注入dataSource对象 --><property name="dataSource" ref="dataSource" /><!-- 搜索带Annotation的实体 --><property name="packagesToScan"><list><value>com.rt.sidemo.model</value><!--<value>com.rt.sidemo....</value> --></list></property></bean><!-- Template --><bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory"></property></bean> </beans>
JDBC的配置
jdbc.driverClassName=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@localhost:1521:ORCLjdbc.username=scottjdbc.password=890307
五:test
public class StudentServiceTest {@Testpublic void testAdd() throws Exception {//Spring读取spring配置信息ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-common.xml");//相当于从代理类得到具体实例,由xml决定怎么选择类实例化StudentService service01 = (StudentService)ctx.getBean("StudentService");Student stu = new Student();//手动组装User实例 u//stu.setStudentid(???); 用自动增长序列stu.setName("Spring+Hibernate");stu.setAge(777);service01.add(stu);//把组装好的u传给xml实例化的servicectx.destroy();}@Testpublic void testDelById() throws Exception {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-common.xml");StudentService service01 = (StudentService)ctx.getBean("StudentService");service01.delById(23);//只需要把id传给实例化的servicectx.destroy();}@Testpublic void testGetAll() throws Exception {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-common.xml");StudentService service01 = (StudentService)ctx.getBean("StudentService");System.out.println("查询全部:");List<Student> stusAll = (List<Student>)service01.getAll();for(int i=0;i<stusAll.size();i++){System.out.println(stusAll.get(i));}ctx.destroy();}@Testpublic void testUpdateStudent() throws Exception {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-common.xml");StudentService service01 = (StudentService)ctx.getBean("StudentService");Student stu = new Student();//手动组装User实例 ustu.setStudentid(25);stu.setName("SH");stu.setAge(777);service01.updateStudent(stu);//把组装好的u传给spring实例化的servicectx.destroy();}@Testpublic void testSelectByName() throws Exception {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-common.xml");StudentService service01 = (StudentService)ctx.getBean("StudentService");System.out.println("查询全部:");String name = "SH";List<Student> stusAll = (List<Student>)service01.selectByName(name);for(int i=0;i<stusAll.size();i++){System.out.println(stusAll.get(i));}ctx.destroy();}}
- Spring3整合Hibernate3.6之一:简单CRUD
- Struts2+Spring3+Hibernate3.6整合之一:用户管理
- Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)
- Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)
- 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD
- Struts2+Spring3+Hibernate3 SSH框架整合实现CRUD
- 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD
- Struts2+Hibernate3+Spring3简单整合练习
- Struts2+Hibernate3+Spring3简单整合练习
- Struts2+Hibernate3+Spring3简单整合练习
- Struts2+Hibernate3+Spring3简单整合练习
- Struts2.2+Spring3.0+Hibernate3.6整合
- struts2 spring3 hibernate3整合
- Struts2+Spring3+Hibernate3整合
- Struts2+Hibernate3+Spring3 整合
- Struts2+Spring3+Hibernate3整合
- spring3 struts2 hibernate3整合
- SSH简单整合(Struts2.2.3.1+Spring3.1.0+Hibernate3)
- Vmware Tools的安装
- sql存储过程
- CSS样式小技巧
- Android 调试:java 跨工程调试 android 项目
- Java文件复制
- Spring3整合Hibernate3.6之一:简单CRUD
- 看完后认真想10秒钟,你会改变自己....................
- java技术体系
- OpenCV--HighGUI视频读写和显示
- Hibernate_一对一单向外键关联_XML
- 冲突域与广播域(区别、知识要点)
- MySQLWorkbench里的稀奇事之timestamp的非空默认值
- 宏开关管理模块的实现[C语言]
- PHP设计模式——工厂方法模式(研磨设计模式学习笔记)