閱讀301 返回首頁    go 阿裏雲 go 技術社區[雲棲]


SSH整合學習筆記之spring與hibernate簡單整合.doc

SSH整合學習筆記

大致的學習了一下struts1.x struts2.x  spring2.5 hibernate3.6,覺得東西很多,好些東西都記不住,最後發現想記住的方法就是多練習。自己多寫一下簡單的工程也會把這些知識鞏固,但是公司現在不用這個,所以隻能記下筆記,不忙的時候再拿來看看,堅持的練習一下。我也是初學,所以隻是記下一些基礎的東西,如果寫錯了什麼,請朋友多多指出。

個人對SSH的理解也不算深入,隻是大概的學完一圈覺得spring很強大,有的人覺得spring很難學,但是我覺得struts很難學,要記得的東西很多,加上不用,遲早會忘記的。所以總結說來沒難易之分。隻看你用了多少,寫了多少。

寫的多了不會也會了。這裏簡單的寫一下整合SSH自己的方法。不對之處請多多批評。

個人觀點:SSH就是有一個javaweb的變化封裝而已,其實在整合之前,你學會哪個框架都可以單獨出來使用。互不影響。整合SSH最簡單直接的辦法就是先整合spring和hibernate,實現業務邏輯與DAO層的整合。然後再將struts與spring進行整合,這個以spring為中心就把SSH整合到了一起。Struts1.x和Struts2.x在與Spring整合的時候會略有不同。

進入正題:要整合SSH首先必備的是jar包。這裏是我們將會用到的所有的jar包:可以到我的資源裏下載,當然去官網找更好了。

Hibernate3.6:共10個

antlr-2.7.6.jar

commons-collections-3.1.jar

dom4j-1.6.1.jar

hibernate3.jar

hibernate-jpa-2.0-api-1.0.0.Final.jar

javassist-3.12.0.GA.jar

jta-1.1.jar

log4j-1.2.15.jar

slf4j-api-1.6.1.jar

slf4j-log4j12-1.6.1.jar

Spring2.5:共7個

aspectjrt.jar

aspectjweaver.jar

cglib-nodep-2.1_3.jar

commons-codec.jar

commons-lang.jar

commons-logging.jar

spring.jar

      Struts2.x:

commons-io-1.3.2.jar

commons-fileupload-1.2.1.jar

freemarker-2.3.16.jar

ognl-3.0.jar

struts2-core-2.2.1.1.jar

struts2-spring-plugin-2.2.1.1.jar

xwork-core-2.2.1.1.jar

      Struts1.x:

                      antlr-2.7.2.jar

commons-beanutils-1.8.3.jar

commons-chain-1.1.jar

commons-digester-1.8.jar

commons-logging-1.0.4.jar

commons-validator-1.3.1.jar

oro-2.0.8.jar

struts-core-1.3.8.jar

struts-el-1.3.8.jar

struts-extras-1.3.8.jar

struts-faces-1.3.8.jar

struts-mailreader-dao-1.3.8.jar

struts-scripting-1.3.8.jar

struts-taglib-1.3.8.jar

struts-tiles-1.3.8.jar

      pool:

                      c3p0-0.9.1.2.jar

                      commons-dbcp-1.4.jar

                      c3p0-oracle-thin-extras-0.9.1.2.jar

      driver:         

                      mysql-connector-java-5.0.8-bin.jar

mysql-connector-java-5.1.5-bin.jar

ojdbc14.jar

      JSTL:

                      Jstl.jar

Standard.jar

      Junit:

                      junit-4.4.jar

      utils:

                      commons-codec-1.5.jar

                      commons-lang-2.5.jar

然後我們就打開IDE,我用的是MyEclipse8.6 搭建一個web project 注意JDK的版本和編譯器的版本最好一致,否則會出現麻煩。在WEB-INF下的lib文件夾內導入我們的jar包。然後先從hibernate開始。SSH的jar包我們已經有了,接下來就是配置文件。Hibernate的配置文件在hibernate的源碼包中可以找到,具體辦法:到官網下載hibernate-distribution-3.6.0.Final-dist.zip這個文件然後將其解壓----project----etc裏麵就可以看到hibernate.cfg.xml。

在web工程下建立一個Source folder可以起名為conf(這個隨意),這個文件夾下將來存放我們所有的配置文件。首先把hibernate.cfg.xml拷貝到這個文件夾下。然後開始建包,無論用SSH還是用servlet去寫工程,我們本著MVC三層架構去建立都要有的幾個包:Dao包---存放DAO接口 ,  Dao.Impl包DAO實現類的包  ,Service包---存放Service接口,   Service.Impl包Service實現類的包,domain存放實體bean的包, action包 控製層的包(這裏用Struts所以寫的action包),test包 用於測試我們程序的包。這些包名都可以根據個人習慣隨意命名。

我們采用正向工程的方式開始搭建:因為隻是為了搭建SSH,所以很簡單。

設計實體:

     Person實體:對應的屬性:id integer類型 name String類型

這個時候我們需要一個實體對應的配置文件,可以去hibernate的源碼包中搜索*.hbm.xml然後拷貝一個。在SSH整合時,這個配置文件和單獨使用hibernate時配置一致。然後配置hibernate.cfg.xml文件。這裏一般分為三步:一、數據庫信息(方言+連接信息) 二、其他配置     三、聲明自己的映射文件。因為後期我們整合SSH後要有spring來管理事務。所以數據配置的相關信息最終將在spring中配置。這裏先配置是為了保證我們每配置一步做一步的測試,以保證程序的正確性,防止最後一起測試出現問題很難尋找與解決的情況發生。當配置好hibernate以後我們可以寫一個test測試類測試一下。這裏使用的是hibernate默認的連接池。C3P0的使用會在後麵介紹。

Hibernate.cfg.xml  :

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    "https://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

    <property name="hibernate.connection.password">root</property>

    <property name="hibernate.connection.username">root</property>

    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring2hibernate</property>

    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

    <property name="hibernate.show_sql">true</property>

    <property name="hibernate.hbm2ddl.auto">update</property>

    <mapping resource="com/ty/spring2hibernate/domain/Person.hbm.xml"/>

</session-factory>

</hibernate-configuration>

如果以上操作都完成且沒問題,那麼我們現在開始準備spring的環境,同樣還是配置文件。拷貝一個配置文件到conf文件夾下。補充說明一下,因為在後期實現的時候有兩種方式:一個是基於xml的方式,一個是基於注解的方式,這兩種方式哪種都可以,但是不要混用。這裏先是用XML方式,注解方式使用起來比較簡單,但是整理筆記比較麻煩。如果明白了XML方式的原理步驟,那麼注解的方式也都是一樣的,不過是寫法的不同而已。

在準備好以上步驟後,我們就要開始寫我們的工程了。先做一下分析:一般是由瀏覽器接收請求,交由控製層,然後控製層調用service層,service再調用dao層。那麼我們現在就寫這三層最基本的代碼。隻摘錄了主要部分:

//Service 業務層接口

public interface PersonService {

        public void savePerson(Person person);

}

//ServiceImpl 業務層實現

//由spring注入

    privatePersonDao personDao;

   

    public voidsavePerson(Person person) {

       //調用dao層的對象 

       personDao.savePerson(person);

    }

   

    public PersonDaogetPersonDao() {

       returnpersonDao;

    }

 

    public voidsetPersonDao(PersonDao personDao) {

       this.personDao= personDao;

    }

//DAO  dao層接口

public interface PersonDao {

  public voidsavePerson(Person person);

}

//DaoImpl  DAO層實現

 

private HibernateTemplate hibernateTemplate;

 

    public voidsavePerson(Person person) {

       //調用hibernate模板的方法保存

       hibernateTemplate.save(person);

    }

 

    publicHibernateTemplate getHibernateTemplate() {

       returnhibernateTemplate;

    }

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate){

       this.hibernateTemplate= hibernateTemplate;

    }

}

 

下麵開始配置spring的applicationContext.xml文件。注意要引入的幾個命名空間不可缺少。

首先就是sessionFactoty,它是整合spring與hibernate的入口。具體配置如下:

applicationContext.xml    :

<?xml version="1.0"encoding="UTF-8"?>

<beans xmlns="https://www.springframework.org/schema/beans"

      xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"

      xmlns:context="https://www.springframework.org/schema/context"

      xmlns:aop="https://www.springframework.org/schema/aop"

      xmlns:tx="https://www.springframework.org/schema/tx"

      xsi:schemaLocation="https://www.springframework.org/schema/beans

                        https://www.springframework.org/schema/beans/spring-beans-2.5.xsd

                        https://www.springframework.org/schema/context

                         https://www.springframework.org/schema/context/spring-context-2.5.xsd

                        https://www.springframework.org/schema/aop

                        https://www.springframework.org/schema/aop/spring-aop-2.5.xsd

                         https://www.springframework.org/schema/tx

                        https://www.springframework.org/schema/tx/spring-tx-2.5.xsd ">

 

  <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    <property name="configLocation">

      <value>classpath:hibernate.cfg.xml</value>

    </property>

  </bean>

 

  <bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate">

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

  </bean>

 

  <bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">

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

  </bean>

 

   <tx:advice id="advice"transaction-manager="txManager">

      <tx:attributes>

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

         <tx:method name="*" read-only="true"/>

      </tx:attributes>

   </tx:advice>

   

  <aop:config>

    <aop:pointcut id="perform"expression="execution(*com.ty.spring2hibernate.service..*.*(..))"/>

    <aop:advisor advice-ref="advice"pointcut-ref="perform"/>

  </aop:config>

 

  <bean  id="personDao"class="com.ty.spring2hibernate.dao.impl.PersonDaoImpl">

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

  </bean>

 

  <bean id="personService"class="com.ty.spring2hibernate.service.impl.PersonServiceImpl">

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

  </bean> 

</beans>

OK !!!這個時候我們可以寫一個測試類去測試一下spring與hibernate整合是否成功。其實你如果控製層不用struts,隻用servlet的話,那麼你現在就可以直接用了。

Test :

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");

       PersonService personService = (PersonService) ac

              .getBean("personService");

       Person person = new Person();

       person.setName("aaa");

       personService.savePerson(person);

以上是spring與hibernate的整合。隻是簡單的整合,一般實際應用當中我們會用連接池技術,連接數據庫等配置都會在spring的配置文件中進行配置,由spring來管理事務。這些我將在後麵的筆記中寫到。

源碼下載地址:

https://dlwt.csdn.net/fd.php?i=663834883854331&s=b9a9974e12cdac65a98f04a955c0acfb

 

最後更新:2017-04-02 06:51:50

  上一篇:go 匹配指定id的HTMLDom元素的正則
  下一篇:go Android 之 Notification