三. Spring与Hibernate 进行整合(牵扯到数据库)
这两个整合,主要是将Hibernate的SessionFactory 的创建交给Spring,事务管理也交给Spring。 在dao层中引入HibernateTemplate 类进行。
三.一 Hibernate的jar包
基本包:
c3p0 连接池包
hibernate的日志包
三.二 mysql 驱动包
三.三 Spring的orm 包(去spring中找)
有重复的jar包。
javassist-3.11.0.GA.jar (struts2里面)
与
javassist-3.22.0-GA.jar (hibernate 里面)
去掉低版本的。
三.四 配置Hibernate的User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 引入相应的约束 --> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!--暂时不介绍具体的标签什么意思--> <hibernate-mapping package="com.yjl.pojo"> <!-- 具体的实体类 --> <class name="User" table="user"> <!-- 主键 --> <id name="id" column="id"> <generator class="native"></generator> </id> <!-- 其余属性 --> <property name="name"></property> <property name="sex" ></property> <property name="age"></property> </class> </hibernate-mapping>
三.五 配置Hibernate的hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 引入相应的结束 --> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <!-- 对节点暂时不做介绍 --> <hibernate-configuration> <session-factory> <!-- 关于Hibernate的相应配置移动到Spring了。 --> <!-- 引入方言 --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.format_sql">true</property> <!-- 引入相应的约束文件 ctrl点击时可以正确进入--> <mapping resource="com/yjl/pojo/User.hbm.xml"/> </session-factory> </hibernate-configuration>
三.六 jdbc.properites 文件
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring jdbc.username=root jdbc.password=abc123
下面的一切,都是在applicationContext.xml 配置文件中进行的。
三.七 配置数据源 ,采用c3p0的方式
<!-- 引入配置文件 前面要加上classpath--> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClassName}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
三.八 创建SessionFactory
<!-- 创建sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!--指定hibernate配置文件的位置--> <property name="configLocations" value="classpath:hibernate.cfg.xml"></property> </bean>
三.九 创建HibernateTemplate
<!-- 创建Hibernate模板 --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
三.十 在userDao中引入hibernateTemplate
需要将userDao与HibernateTempldate 类进行相应的关联,在UserDaoImpl 类中采用setter 注入的方式进行关联。
所以, userDaoImpl 便需要进行相应的修改:
package com.yjl.dao.impl; import java.util.ArrayList; import java.util.List; import org.springframework.orm.hibernate5.HibernateTemplate; import com.yjl.dao.UserDao; import com.yjl.pojo.User; /** @author:yuejl @date: 2019年5月22日 下午8:04:43 @Description 类的相关描述 */ public class UserDaoImpl implements UserDao { private HibernateTemplate hibernateTemplate; @SuppressWarnings("unchecked") @Override public List<User> findAll() { System.out.println("执行了查询全部的方法"); List<User> userList=new ArrayList<User>(); // 采用hibernate查询的方式。 String hql="from User"; System.out.println("输出值为:"+hibernateTemplate); userList=(List<User>) hibernateTemplate.find(hql); return userList; } public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } }
需要改变一下 userDao 的bean 创建,setter注入hibernateTemplate 属性
<!-- 设置userDao类 --> <bean id="userDao" class="com.yjl.dao.impl.UserDaoImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"></property> </bean>
三.十一 重启服务器,进行验证
说明,Hibernate 查询OK, Spring 与Hibernate 简单整合成功。 但,还没有结束。
三.十二 添加事务管理
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--列举常见的方法形式--> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="new*" propagation="REQUIRED" /> <tx:method name="set*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="change*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="count*" propagation="REQUIRED" read-only="true" /> <tx:method name="load*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRED" read-only="true" /> </tx:attributes> </tx:advice> <!-- 配置aop --> <aop:config> <aop:pointcut expression="execution( * com.yjl.service.impl.*.*(..))" id="pointCut1"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut1"/> </aop:config>
三.十三 在web.xml 中添加Session延迟加载OpenSessionInViewFilter
<filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
三.十四 在web.xml 上配置编码过滤器(放在struts2前面)
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
至此,一个简单的S2SH 的整合便基本完成 了。 这只是xml 形式的,还有更简单的注解方式的。
四.所用jar包
共49个基本的。
谢谢!!!