为什么spring要整合hibernate:
1.通用的资源管理。
2.优秀的管理机制(基于依赖注入的sessionFactory管理机制)。
3.统一的事务管理。
4.统一的异常处理
spring整合hibernate:
1.配置数据源:
spring内置实现了org.springframework.jdbc.dataSource.DriverManageDataSource或者是使用DBCP提供的org.apache.commons.dbcp.BasicDataSource.
配置如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/dababase"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
2.配置sessionFactory:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--传入dataSource-->
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<!--添加映射文件-->
<property name="mappingResources">
<list>
<value>com/lxitedu/user.hbm.xml</value>
.................
</list>
</property>
<!--hibernate的属性-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
..............
</props>
</property>
</bean>
3.给继承spring提供的HibernateDaoSupport的dao依赖注入:
<bean id="StudentDAOImpl" class="com.lxitedu.dao.impl.StudentDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
spring提供了简洁的声明式事务控制,只需要在配置文件中增加事务控制片段,业务逻辑代码无须任何改变,spring的声明式事务,甚至支持在不同事务策略之间进行切换。
1.配置Dao
<bean id="StudentDAOImpl" class="com.lxitedu.dao.impl.StudentDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
2.装配事务管理器
<bean id="transactionManage" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sesssionFactory"/>
</property>
</bean>
3.抽象代理类
<bean id="proxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<!--传入事务管理器-->
<property name="transacitonManager">
<ref bean="transactionManager"/>
</property>
<!--事务属性-->
<property name="transactionAttributes">
<props>
<prop key="*" PROPAGATION_REQUIRED</prop>
...............
</props>
</property>
4.装配service层
<bean id="studentServiceImpl" class="com.lxitedu.service.impl.StudentServiceImpl">
<property name="studentDao">
<ref bean="StudentDAOImpl"/>
</propety>
5.装配具体事务代理
<bean id="proxyService" parent="proxy">
<property name="target">
<ref bean="studentSerivceImpl/>
</property>
</bean>
以上是针对spring整合Hibernate的事务。
spring整合ibatis
1.配置数据源:
跟Hibernate一样的
2.创建一个SqlMapClient
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
sql.map-config.xml里主要配置:
<sqlMapConfig>
<sqlMap resource="com/lxitedu/dao/ibatis/maps/Account.xml"/>
。。。。。。。。。。
</sqlMapConfig>
3.给继承spring提供的SqlMapClientDaoSupport的dao依赖注入:
<bean id="StudentDAOImpl" class="com.lxitedu.dao.impl.StudentDAOImpl">
<property name="sqlMapClient">
<ref local="sqlMapClient" />
</property>
</bean>
spring为ibatis提供声明式事务
就是装配事务管理器跟Hibernate不同,其余的一样。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>