zoukankan      html  css  js  c++  java
  • .Net转Java自学之路—SSH框架篇一

    SSH框架:

      Struts2(web层)、Spring(service层)、Hibernate(dao层)整合。

      ssh框架整合式两两整合,就是Struts2与Spring整合、Spring与Hibernate整合。

      Struts2与Spring整合:

        就是把struts2的action对象创建交给spring进行管理。因为action是多实例的,所以需要加scope。

    <bean id="testAction" class="Action全路径" scope="prototype(多例)"></bean>

        所以在struts2的配置文件中配置该action的action标签中的class不需要action的全路径,若录入了action全路径,action对象会被创建俩次,在该class的属性值中录入spring配置的action的bean的id值。该书写方法的前提是必须引入struts2和spring的整合jar包:struts2-spring-plugin.jar

    <package id="test" extends="struts-default" namespace="/">
        <action name="testAction" class="testAction"></action>
    </package>

      Spring与Hibernate整合:

        就是把Hibernate中的核心配置文件中的数据库配置交给Spring配置文件中。

        在Hibernate中一致存在第一次访问速度慢的问题,因为第一次访问时创建SessionFactory对象。而在Spring中,只需要把SessionFactory对象创建交给spring管理即可。

        因为Spring配置文件在服务器启动时就会加载,所以就是在服务器启动时创建SessionFactory对象。来解决hibernate第一次访问很慢的问题。

        针对Spring配置SessionFactory对象。Spring有一个封装的类LocalSessionFactoryBean,创建该类LocalSessionFactoryBean的对象即可。

    <!-- sessionFactory对象创建交给spring来管理-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 因为在hibernate核心配置文件中,没有了数据库配置,而数据库配置需要在spring中配置所以需要注入dataSource -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 指定使用hibernate核心配置文件 -->
        <property name="configLocations" value="classpath:hibernate核心配置文件路径和名称"></property>
        
        <!-- 因为在ssh框架整合中hibernate核心配置文件可以省略。那么,若没有hibernate核心配置文件时,需要配置hibernate的核心配置文件中的一些信息 -->
        <!-- 配置hibernate基本信息 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDiealect</prop>
                <prop key=""></prop>
            </props>
        </property>
        
        <!-- 配置映射文件引入 -->
        <property name="mappingResources">
            <list>
                <value>映射文件路径</value>
                <value>映射文件路径</value>
                ......
            </list>
        </property>
    </bean>

      DAO层中使用HibernateTemplate模板类:

    public class TestDao{
        
        private HibernateTemplate hibernateTemplate;
        public void setHibernateTemplate(HibernateTemplate hibernateTemplate){
            this.hibernateTemplate=hibernateTemplate;
        }
        
        public void method(){
            
        }
    }

        在Spring配置文件中创建HibernateTemplate对象并注入SessionFactory对象

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

        在service层调用了TestDao类,那么需要配置该类的对象;该对象需要注入HibernateTemplate对象。否则在该类中用hibernateTemplate对象做crud操作时会报空指针异常(NullPointerException)。

    <bean id="testDao" class="TestDao类全路径">
        <property name="hibernateTemplate" ref="hibernateTemplate"></property>
    </bean>

        然后配置事务,先配置事务管理器HibernateTransactionManager,并注入SessionFactory(因为在配置SessionFactory时已经包含了dataSource,直接注入dataSource也可以)

    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- 开启事务注解扫描-->
    <tx:annotation-driven transaction-manager="transactionManager" />

        在用到事务的service类中加上@Transactional

        HibernateTemplate模板中常用API:

    //Serializable save(Object entity);
        public void add(){
            Test test=new Test();
            test.setXXX("");
            test.setXXX("");
            ......
            hibernateTemplate.save(test);
        }
    
    //void update(Object entity);
    
    //void delete(Object entity);
    
    //<T> T get(Class<T> entityClass,Serializable id);
        Test test = hibernateTemplate.get(Test.class,1);
    
    //<T> T load(Class<T> entityClass,Serializable id);
    
    //List find(String queryString,Object... values);
        List<Test> list = (List<Test>)hibernateTemplate.find("from Test");
        List<Test> list = (List<Test>)hibernateTemplate.find("from Test where column=? and column=?","?的值","?的值");
        for(Test test:list){遍历}

      Spring分模块开发:

    <!-- 在Spring核心配置文件中 引入其他Spring配置文件 -->
    <import resource="classpath:引入的配置文件全路径" />
  • 相关阅读:
    HDU 1863 畅通project (最小生成树是否存在)
    经常使用MD5算法代码
    HDU 5045(Contest-费用流)[template:费用流]
    【c语言】统计一个数二进制中的1的个数
    git
    如何在阿里云服务器里配置iis 搭建web服务
    war包放入tomcat
    互联网推送服务原理:长连接+心跳机制(MQTT协议)
    保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护 3
    保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护 2
  • 原文地址:https://www.cnblogs.com/zltao/p/10527315.html
Copyright © 2011-2022 走看看