Spring 整合 Hibernate
1.Spring指定 database,给下面创建的 SessionFactory用
1 <!-- !!!!!可以使用 @Resource 将 这个bean对象注入到DAO中,供DAO使用 !!!!! --> 2 3 <!-- 这是将一些目标参数写死在value中,也可以现在配置文件中 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 4 destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> 5 </property> <property name="url"> <value>jdbc:mysql://localhost:3306/spring</value> 6 </property> <property name="username"> <value>root</value> </property> <property 7 name="password"> <value>root</value> </property> </bean> --> 8 9 10 <!-- 使用配置文件的方式,将数据库的一些驱动信息,写到配置文件中 --> 11 <bean 12 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 13 <!-- 可以向想象得到,在 PropertyPlaceholderConfigurer 中 存在一个 setLocations(List or 14 Array) ,这些配置信息,就放在 locations中 --> 15 <property name="locations"> 16 <!-- 让Spring 去 src 目录下去找 jdbc.properties 文件 --> 17 <value>classpath:jdbc.properties</value> 18 </property> 19 </bean> 20 21 <bean id="dataSource" destroy-method="close" 22 class="org.apache.commons.dbcp.BasicDataSource"> 23 24 <!-- value 为 配置文件中 key 为 jdbc.driverClassName 的值 --> 25 <property name="driverClassName" value="${jdbc.driverClassName}" /> 26 <property name="url" value="${jdbc.url}" /> 27 <property name="username" value="${jdbc.username}" /> 28 <property name="password" value="${jdbc.password}" /> 29 </bean>
2.创建 SessionFactory ,然后注入给DAO去使用
1 <!-- 往Spring容器中注入 sessionFactory对象(这个sessionFactory是Spring修改过的), 2 往sessionFactory 中注入 dataSource 3 和 annotatedClasses(实体对象) 4 和 hibernateProperties(hibernate配置信息) 5 这三者相当于 hibernate.cfg.xml 这个 hibernate 的配置文件--> 6 <!-- 那么 只需要往DAO中注入sessionFactory ,那么就和 hibernate一样 生成session,操作实体--> 7 8 <bean id="sessionFactory" 9 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 10 <property name="dataSource" ref="dataSource" /> 11 <property name="annotatedClasses"> 12 <list> 13 <value>com.bjsxt.model.User</value> 14 </list> 15 </property> 16 <property name="hibernateProperties"> 17 <props> 18 <prop key=" hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 19 <prop key="hibernate.show_sql">true</prop> 20 </props> 21 </property> 22 </bean> 23 24 </beans>
3.往DAO中注入SessionFactory
1 @Component("userDAO") 2 public class UserDAOImpl implements UserDAO{ 3 private SessionFactory sessionFactory; 4 5 public SessionFactory getSessionFactory() { 6 return sessionFactory; 7 } 8 9 //在DAO中 注入 SessionFactory 10 @Resource 11 public void setSessionFactory(SessionFactory sessionFactory) { 12 this.sessionFactory = sessionFactory; 13 } 14 15 @Override 16 public void save(User user) { 17 Session session = sessionFactory.openSession(); 18 session.beginTransaction(); 19 session.save(user); 20 session.getTransaction().commit(); 21 System.out.println(sessionFactory.getClass()); 22 System.out.println("a user saved"); 23 } 24 25 26 }