三大集合框架整合

SSH整合过程

注意  在整合框架中,每一大步都要测试,这样容易排查问题出了问题从头开始

一.  导包

1..现将hibernate中的包全部导入进来

jpa   注意10包+1个驱动包  

1.     导入struts2包


导包时 如果发现有同一个包 版本不同 一定要将其中之一删掉 原则是删除版本低的

再导入struts2和spring整合的包

一旦导入了这个包 struts2在启动的时候自动寻找spring容器如果 没有配置spring就会出现异常

1.     导入spring的所有包

4+2基本的包

2+2   aop

4  c3p0  tx  数据库驱动Springjdbc

1              test

1              spring web包

1        orm



二.  测试spring是否配置成功

首先创建一个applicationContext.xml

导入4个约束 beans context aop  tx

在web.xml中配置 监听器

<listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

   </listener>

   <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>classpath:applicationContext.xml</param-value>

</context-param>


  <beanname="userAction"class="cn.hd.action.UserAction"></bean>


三.单独配置struts2‘’

先把struts2插件删除掉

书写struts.xml文件  导入约束 书写刚刚的userAction的配置

在web.xml中配置struts2的过滤器

<struts>

  <package name="main" namespace="/"extends="struts-default">

      <action name="userAction_*"class="cn.hd.action.UserAction" method="{1}">

          <result name="success">/index.jsp</result>

      </action>

  </package>

</struts>

  <filter>

       <filter-name>struts2</filter-name>

       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

   </filter>

   <filter-mapping>

       <filter-name>struts2</filter-name>

       <url-pattern>/*</url-pattern>

</filter-mapping>

四.整合spring和struts2

(1)     将刚刚删除的包导入

(2)     添加常量

<!--struts.objectFactory = spring-->

   <!--action的创建交给spring-->

   <!--struts.objectFactory.spring.autoWire=name-->

   <!--spring负责装配的action属性-->

   <constant name="struts.objectFactory"value="spring"></constant>

   <constant name="struts.objectFactory.spring.autoWire"value="name"></constant>

   <constant name="struts.devMode"value="true"></constant>

(3)     有spring管理的action

1.     struts2 闯将action 由spring负责struts2的属性注入

struts2的配置文件

   <package name="main" namespace="/"extends="struts-default">

      <action name="userAction_*"class="cn.hd.action.UserAction" method="{1}">

          <result name="success">/index.jsp</result>

      </action>

  </package>

Spring的配置文件

<bean name="userService"class="cn.hd.service.impl.UserServiceImpl">

</bean>

  <beanname="userAction" class="cn.hd.action.UserAction">

   <property name="userService"ref="userService"></property>

 </bean>

2.     完全交给spring去管理action

配置action时class的属性值改为spring中的bean的名字

struts2的配置文件

   <package name="main" namespace="/"extends="struts-default">

      <action name="userAction_*" class=" userAction"method="{1}">

          <result name="success">/index.jsp</result>

      </action>

  </package>

Spring的配置文件注意:spring配置action也要配置的类的创建模式为多例

<bean name="userService"class="cn.hd.service.impl.UserServiceImpl">

</bean>

  <beanname="userAction" class="cn.hd.action.UserAction" scope="prototype">

   <property name="userService"ref="userService"></property>

 </bean>

单独整合hibernate

(1)     书写实体类 和 orm数据源文件

(2)     书写核心配置文件

将线程绑定 和事务的隔离级别删除掉 后面使用spring管理事务

(3)     书写测试类,测试hibernate单独配置成功

  public voidfun(){

       Configuration conf = new Configuration().configure();

       SessionFactory sessionFactory = conf.buildSessionFactory();

       Session session = sessionFactory.openSession();

       Transaction transaction = session.beginTransaction();

        Useruser = new User();

       user.setMoney(1000);

       user.setName("张四");

       user.setPsd("123456");

       

       session.save(user);

       transaction.commit();

       session.close();

       sessionFactory.close();

}

六.hibernate 和spring结合

  实际上结合的原理就是hibernate中的sessionFactory和事务交给

Spring管理

有两种方法

1.     hibernate中的配置文件不动,在spring配置文件中配置sessionFactory对象

<!--配置hibernate-->

  <beanname="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">

   <property name="configLocation"value="classpath:hibernate.cfg.xml"></property>

 </bean>

书写测试代码

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:applicationContext.xml")

public class Demo1 {

    @Resource(name= "sessionFactory")

    privateSessionFactory sessionFactory;

    @Test

    publicvoid  fun(){

       Session session = sessionFactory.openSession();

        Useruser = session.get(User.class, 1);

       System.out.println(user);

    }

}

2.     不适用hibernate配置文件  所有配置写入到spring文件中

<!--第二种方案-->

   <property name="hibernateProperties">

     <props>

       <propkey="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>

       <propkey="hibernate.connection.url">jdbc:mysql://localhost:3306/sshdemo</prop>

       <propkey="hibernate.connection.username">root</prop>

       <propkey="hibernate.connection.password">123</prop>

       <propkey="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>

       <!--可选-->

       <prop key="hibernate.show_sql">true</prop>

       <prop key="hibernate.format_sql">true</prop>

       <prop key="hibernate.hbm2ddl.auto">update</prop>

     </props>

   </property>

   <property name="mappingDirectoryLocations"value="classpath:cn/hd/entity"></property>

 </bean>

七.整合c3p0连接池

使用spring读取连接池的配置文件

配置连接池的bean

<context:property-placeholderlocation="classpath:db.properties"></context:property-placeholder>

 <bean name="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource">

    <property name="driverClass"value="${jdbc.driverClass}"></property>

   <property name="jdbcUrl"value="${jdbc.jdbcUrl}"></property>

   <property name="user"value="${jdbc.user}"></property>

   <property name="password"value="${jdbc.password}"></property>

 </bean>

将hibernate中的数据库配置文件删除掉,增加一个propertity为dataSource

<propertyname="dataSource" ref="dataSource"></property>

八.整合状态下操作数据库(dao)

书写dao类   并让dao继承 hibernateDaoSupp

提供了一个HibernateTemplate模板

这个模板可以实现hibernate的 crud hql criteria sql 四种查询

@Override

    publicvoid add(User user) {

       HibernateTemplate ht = getHibernateTemplate();

       ht.save(user);

}

九.整合spring aop事务

1.获得事务管理对象

(dataSourceTransactionManager,HibernateTransactionManager)

<bean name="transactionManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager"></bean>

3.     配置事务通知

 <!--=======配置事务=========-->

  <beanname="transactionManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager">

   <property name="sessionFactory"ref="sessionFactory"></property>

 </bean>

  <!--配置事务通知-->

 <tx:advice id="txAdvice"transaction-manager="transactionManager">

   <tx:attributes>

     <tx:method name="add*" isolation="DEFAULT"propagation="REQUIRED" read-only="false"/>

     <tx:method name="persist*" isolation="DEFAULT"propagation="REQUIRED" read-only="false"/>

     <tx:method name="delete*" isolation="DEFAULT"propagation="REQUIRED" read-only="false"/>

     <tx:method name="remove*" isolation="DEFAULT"propagation="REQUIRED" read-only="false"/>

      <tx:methodname="update*" isolation="DEFAULT"propagation="REQUIRED" read-only="false"/>

     <tx:method name="modify*" isolation="DEFAULT"propagation="REQUIRED" read-only="false"/>

     <tx:method name="get*" isolation="DEFAULT"propagation="REQUIRED" read-only="true"/>

     <tx:method name="find*" isolation="DEFAULT"propagation="REQUIRED" read-only="true"/>

   </tx:attributes>

 </tx:advice>

十.介绍Template模板

   直接使用hibernateTemplate.execute就拿到了session

   回到了原始的hibernate开发

@Override

    publicList<User> getAll() {

     return  this.getHibernateTemplate().execute(newHibernateCallback<List<User>>(){

           @Nullable

           @Override

           public List<User> doInHibernate(Session session) throwsHibernateException {

               String hql= "fromUser";

               Query query = session.createQuery(hql);

               List<User> list =query.list();

               return list;

            }

        });

    }







猜你喜欢

转载自blog.csdn.net/leizhenjiang/article/details/80962338