OA学习笔记-006-SPRING2.5与hibernate3.5整合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OA学习笔记-006-SPRING2.5与hibernate3.5整合相关的知识,希望对你有一定的参考价值。

一、为什么要整合

1,管理SessionFactory实例(只需要一个)
2,声明式事务管理

spirng的作用

IOC 管理对象..
AOP 事务管理..

二、整合步骤

1.整合sessionFactory

在applicationContext.xml添加

 1 <!-- 导入外部的properties文件 -->
 2     <context:property-placeholder location="classpath:jdbc.properties"/>
 3 
 4     <!-- 配置SessionFactory -->
 5     <!-- bean默认是单例的 -->
 6     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 7         <!-- 指定hibernate的配置文件位置 -->
 8         <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
 9         <!-- 配置c3p0数据库连接池 -->
10         <property name="dataSource">
11             <!-- 因为连接信息只有连接池用,所以配置在匿名的bean中 -->
12             <bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
13                 <!-- 数据连接信息 -->
14                 <property name="jdbcUrl" value="${jdbcUrl}"></property>
15                 <property name="driverClass" value="${driverClass}"></property>
16                 <property name="user" value="${user}"></property>
17                 <property name="password" value="${password}"></property>
18                 <!-- 其他配置 -->
19                 <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
20                 <property name="initialPoolSize" value="3"></property>
21                 <!--连接池中保留的最小连接数。Default: 3 -->
22                 <property name="minPoolSize" value="3"></property>
23                 <!--连接池中保留的最大连接数。Default: 15 -->
24                 <property name="maxPoolSize" value="5"></property>
25                 <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
26                 <property name="acquireIncrement" value="3"></property>
27                 <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
28                 <property name="maxStatements" value="8"></property>
29                 <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
30                 <property name="maxStatementsPerConnection" value="5"></property>
31                 <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
32                 <property name="maxIdleTime" value="1800"></property>
33             </bean>
34         </property>
35     </bean>

 

2.配置声明式事务管理

在applicationContext.xml添加

1     <!-- 配置声明式事务管理(采用注解的方式,方便)-->
2     <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
3         <property name="sessionFactory" ref="sessionFactory"></property>
4     </bean>
5     <tx:annotation-driven transaction-manager="txManager"/>

 

3.测试

TestService.java

 1 @Service("testService")
 2 public class TestService {
 3 
 4     @Resource
 5     private SessionFactory sessionFactory;
 6 
 7     @Transactional
 8     public void saveTwoUsers() {
 9         Session session = sessionFactory.getCurrentSession();
10 
11         session.save(new User("李白"));
12         //int a = 1 / 0; // 这行会抛异常
13         session.save(new User("杜甫"));
14     }
15 }

 

TestAction.java

 1 //@Component("testAction")
 2 //@Service
 3 //@Repository
 4 @Controller("testAction")
 5 @Scope("prototype")
 6 public class TestAction extends ActionSupport {
 7 
 8     @Resource
 9     private TestService testService;
10     
11     @Override
12     public String execute() throws Exception {
13         System.out.println("---> TestAction.execute()");
14         testService.saveTwoUsers();
15         return "success";
16     }
17 }

3.SpringTest.java

 1 public class SpringTest {
 2 
 3     private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
 4 
 5     @Test
 6     public void testBean() throws Exception {
 7         TestAction testAction = (TestAction) ac.getBean("testAction");
 8         System.out.println(testAction);
 9     }
10 
11     // 测试SessionFactory
12     @Test
13     public void testSessionFactory() throws Exception {
14         SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");
15         System.out.println(sessionFactory);
16     }
17 
18     // 测试事务
19     @Test
20     public void testTransaction() throws Exception {
21         TestService testService = (TestService) ac.getBean("testService");
22         testService.saveTwoUsers();
23     }
24 }

 

4.User.hbm.xml  

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 
 6 <hibernate-mapping package="cn.itcast.oa.domain">
 7 
 8     <class name="User" table="itcast_user">
 9         <id name="id">
10             <generator class="native"/>
11         </id>
12         <property name="name" />
13     </class>
14     
15 </hibernate-mapping>

 

以上是关于OA学习笔记-006-SPRING2.5与hibernate3.5整合的主要内容,如果未能解决你的问题,请参考以下文章

SSH整合总结(OA项目)

mybatis学习笔记一

hibernate框架学习笔记5:缓存

OA学习笔记-007-Dao层设计

OA学习笔记-002-Sruts2.1配置

OA学习笔记-008-岗位管理Action层实现