spring整合hibernate(SSH)
重點:
- 1、配置專案環境;
- 2、匯入SSH所依賴的jar包;
- 3、spring整合hibernate ;
- 4、spring整合base模組;
- 5、spring模組的開發案例以及biz的介紹
- 6、web整合spring、struts;
重點分析:
配置專案環境:
1、配置Dynamic Web Moduld (3.1)和jdk 環境(1.8); 1.1、Dynamic Web Moduld的 是2.3版本 ,需要把專案的Dynamic Web Moduld 的版本修改我3.1,專案jdk預設是1.5 版本,1.5版本無法跟支援專案執行,需把 jdk 版本修改 1.8;
步驟:
1、 專案右鍵 --》點選properties --》project facets
2、將Dynamic Web Moduld 後面將 1.5 修改成1.8 ,再將前面的勾去掉–》將Java 的版本1.5 修改成1.8 --》點選Apply
3、將Dynamic Web Moduld 前面的勾給勾上,然後就在Apply旁邊的Further configuration available… 點選進去 ,在content directory裡面填寫 src/main/webapp (注意不要寫錯), 然後點選 Apply and Colse
成功的介面
匯入SSH所依賴的jar包:
- pom 1.1 hibernate相關(5.2.12.Final) hibernate-core hibernate-c3p0(資料庫連線池) hibernate-ehcache mysql-connector-java(5.1.44)
1.2 spring相關(5.0.1.RELEASE) spring-context spring-orm spring-web spring-aspects
注:建立spring的XML檔案時,需要新增beans/aop/tx/context標籤支援 各依賴說明: spring-context 建立spring上下文 spring-orm org.springframework.orm.hibernate5.LocalSessionFactoryBean dataSource:指定資料來源 hibernateProperties:指定hibernate相關屬性,如:dialect/show_sql/format_sql mappingResources:指定實體對映檔案 注1:本章採用將hibernate配置全部交給spring管理,因此專案中不再有hibernate.cfg.xml檔案 org.springframework.orm.hibernate5.HibernateTemplate org.springframework.orm.hibernate5.support.HibernateDaoSupport 測試一:執行測試類Test1,測試hibernate與spring的整合 spring-web org.springframework.web.context.ContextLoaderListener contextConfigLocation:classpath:applicationContext-*.xml org.springframework.web.context.support.WebApplicationContextUtils 測試二:訪問test2.jsp,測試spring與WEB專案的整合 spring-aspects spring的AspectJ依賴,解析事務切點
1.3 struts2相關(2.5.13) struts2-core struts2-spring-plugin struts2與spring整合的外掛 將action配置到spring中,struts的action標籤的class屬性填寫spring中bean的名字或id
1.4 log配置 1.4.1 log4j(1.X版) 不建議使用
1.4.2 log4j2(2.9.1)
log4j-core
log4j-api
log4j-web
不建議使用
1.4.3 log4j2 + slf4j(使用ehcache開啟hibernate二級快取必須使用第二種方式配置日誌)
注1:本章使用第三種方式配置日誌,即log4j2 + slf4j
1.5 other junit(4.12) javax.servlet-api(4.0.0)
1.6 jstl jstl(1.2) standard(1.1.2)
1.7 jsp自定義標籤依賴(必須與tomcat的版本一致) tomcat-jsp-api
注1:如何解決專案中不支援EL表示式的問題?將web.xml的DTD的版本由2.3升級到3.0即可。因為web2.3是不支援EL表示式的
pom.xml 程式碼分享
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>Test_SSH</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Test_SSH Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<hibernate.version>5.2.12.Final</hibernate.version>
<mysql.version>5.1.44</mysql.version>
<spring.version>5.0.1.RELEASE</spring.version>
<struts2.version>2.5.13</struts2.version>
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>2.9.1</log4j.version>
<disruptor.version>3.2.0</disruptor.version>
<junit.version>4.12</junit.version>
<servlet.version>4.0.0</servlet.version>
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version>
<tomcat-jsp-api.version>8.0.47</tomcat-jsp-api.version>
</properties>
<dependencies>
<!-- 1、hibernate相關(5.2.12.Final) -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 2、spring相關(5.0.1.RELEASE) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 3、struts2相關(2.5.13) -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
<!-- 4、log配置 -->
<!-- log配置:Log4j2 + Slf4j -->
<!-- slf4j核心包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<!--用於與slf4j保持橋接 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<!--核心log4j2jar包 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<!--web工程需要包含log4j-web,非web工程不需要 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<!--需要使用log4j2的AsyncLogger需要包含disruptor -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>${disruptor.version}</version>
</dependency>
<!-- 5、other -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${standard.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>${tomcat-jsp-api.version}</version>
</dependency>
</dependencies>
<build>
<finalName>Test_SSH</finalName>
<plugins>
<!--第一步就是配置maven-compiler-plugin外掛 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
-
SSH整合 2.1 匯入ehcache.xml 2.2 匯入log4j2.xml 2.3 整合hibernate 2.3.1 注入資料庫配置檔案 2.3.2 配置c3p0連線池 2.3.3 註冊LocalSessionFactoryBean 2.3.4 spring宣告式事物
宣告式事務配置
-
必須先修改spring配置檔案的宣告部分,新增對aop標籤和tx標籤的支援
-
配置SessionFactory(spring和hibernate整合時已完成)
-
配置事務管理器 HibernateTransactionManager
-
配置事務的傳播特性(tx) add edit del load|list 事務傳播特性(PROPAGATION_REQUIRED|readOnly)
-
配置自動代理 a) 引用環繞通知txAdvice b) 定義一個切入點 execution(* *…Biz.(…)) a:返回值不限 b:包名不限 c:介面名以Biz結尾 d:方法名及引數不限 c) 自動代理的原理 在spring上下文初始化完成以後,自動代理會逐個檢查spring上下文中JavaBean實現的介面是否滿足自動代理的條件,如果滿足條件,則將此bean和通知結合生成一個代理物件,並以此代理物件替換spring上下文中的bean,之後你訪問的就是代理物件了
注1:狸貓換太子
2.3.5 註冊HibernateTemplate 2.3.6 註冊Base模組
-
-
程式程式碼的分層(base模組)
/base /action /biz /dao /entity /book /action /biz /dao /entity
-
整合案例演示
4.1 entity *.hbm.xml
4.2 dao IXxxDAO XxxDAOImpl(繼承HibernateDaoSupport類,方便注入HibernateTemplate) applicationContext-Xxx.xml
查詢
this.getHibernateTemplate().execute(
4.3 biz IXxxBiz XxxBizImpl applicationContext-Xxx.xml
4.4 test(junit4)
4.5 action 將action配置到applicationContext-Xxx.xml, 注:必須為多例模式(重要)
struts.xml配置注意事項: 1)
2)struts-Xxx.xml檔案中的action的class屬性型別填寫spring中的id。
- web.xml配置
5.1 Spring上下文ApplicationContext.xml的載入 contextConfigLocation classpath:applicationContext.xml
5.2 啟動Web容器時,自動裝配ApplicationContext.xml的配置資訊 org.springframework.web.context.ContextLoaderListener
5.3 中文亂碼過濾器 encodingFilter org.springframework.web.filter.CharacterEncodingFilter true encoding UTF-8 encodingFilter /*
5.4 其他配置 5.4.1 防止記憶體洩露、快取清除監聽器 org.springframework.web.util.IntrospectorCleanupListener
5.4.2 用於支援3種Bean的作用域:request,session和globalSession
<listener>
<listener-class> org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
5.4.3 把session的關閉延遲到jsp頁面顯示之後,請配在struts2上面
<filter>
<filter-name>OpenSessionInView</filter-name>
<filter-class> org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.5 Struts2核心過濾器