.Net轉Java自學之路—SSH框架篇一

SSH框架:web

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

  ssh框架整合式兩兩整合,就是Struts2與Spring整合、Spring與Hibernate整合。sql

  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.jarsession

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

  Spring與Hibernate整合:app

    就是把Hibernate中的核心配置文件中的數據庫配置交給Spring配置文件中。框架

    在Hibernate中一致存在第一次訪問速度慢的問題,由於第一次訪問時建立SessionFactory對象。而在Spring中,只須要把SessionFactory對象建立交給spring管理便可。ssh

    由於Spring配置文件在服務器啓動時就會加載,因此就是在服務器啓動時建立SessionFactory對象。來解決hibernate第一次訪問很慢的問題。this

    針對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:引入的配置文件全路徑" />
相關文章
相關標籤/搜索