Spring4+hibernate+SpringMvc整合
## 1.創建maven項目,編寫pom文件,把整合框架的相關jar包全都引入
```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/xsd/maven-4.0.0.xsd
modelVersion4.0.0/modelVersion
groupIdcom.qf/groupId
artifactIdssh/artifactId
version0.0.1-SNAPSHOT/version
packagingwar/packaging
properties
spring.version4.2.8.RELEASE/spring.version
gson.version2.8.0/gson.version
servlet.version3.1.0/servlet.version
jsp.version2.1/jsp.version
mysql.version5.1.38/mysql.version
c3p0.version0.9.1.2/c3p0.version
log4j.version1.2.17/log4j.version
jstl.version1.2/jstl.version
jackson.version2.8.9/jackson.version
fileupload.version1.3.1/fileupload.version
common.io.version2.4/common.io.version
hibernate.version5.2.10.Final/hibernate.version
project.encodingUTF-8/project.encoding
fastjson.version1.2.46/fastjson.version
/properties
!-- 配置所有依賴 --
dependencies
!-- 配置servlet相關 --
!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --
dependency
groupIdjavax.servlet/groupId
artifactIdjavax.servlet-api/artifactId
version$/version
scopeprovided/scope
/dependency
!-- 配置JSP相關 --
!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api --
dependency
groupIdjavax.servlet.jsp/groupId
artifactIdjsp-api/artifactId
version$/version
scopeprovided/scope
/dependency
!-- 配置JSTL相關 --
!-- https://mvnrepository.com/artifact/javax.servlet/jstl --
dependency
groupIdjavax.servlet/groupId
artifactIdjstl/artifactId
version$/version
/dependency
!-- 配置資料庫驅動相關 --
!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --
dependency
groupIdmysql/groupId
artifactIdmysql-connector-java/artifactId
version$/version
/dependency
```
```xml
!-- 配置spring相關 --
!-- https://mvnrepository.com/artifact/org.springframework/spring-context --
dependency
groupIdorg.springframework/groupId
artifactIdspring-context/artifactId
version$/version
/dependency
!-- 配置事務相關 --
!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --
dependency
groupIdorg.springframework/groupId
artifactIdspring-tx/artifactId
version$/version
/dependency
!-- 配置spring-jdbc --
!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --
dependency
groupIdorg.springframework/groupId
artifactIdspring-jdbc/artifactId
version$/version
/dependency
!-- 誒只spring-test --
!-- https://mvnrepository.com/artifact/org.springframework/spring-test --
dependency
groupIdorg.springframework/groupId
artifactIdspring-test/artifactId
version$/version
scopetest/scope
/dependency
!-- 配置AspectJ 相關 --
!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --
dependency
groupIdorg.springframework/groupId
artifactIdspring-aspects/artifactId
version$/version
/dependency
!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support --
dependency
groupIdorg.springframework/groupId
artifactIdspring-context-support/artifactId
version$/version
/dependency
!-- 配置SpringMvc相關 --
!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --
dependency
groupIdorg.springframework/groupId
artifactIdspring-webmvc/artifactId
version$/version
/dependency
```
```xml
!-- 配置Log4J相關 --
!-- https://mvnrepository.com/artifact/log4j/log4j --
dependency
groupIdlog4j/groupId
artifactIdlog4j/artifactId
version$/version
/dependency
!-- c3p0連接池 --
!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --
!-- https://mvnrepository.com/artifact/c3p0/c3p0 --
dependency
groupIdc3p0/groupId
artifactIdc3p0/artifactId
version$/version
/dependency
!-- 配置Gson --
!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --
dependency
groupIdcom.google.code.gson/groupId
artifactIdgson/artifactId
version$/version
/dependency
!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --
!-- SpringMvc內置的jackson --
dependency
groupIdcom.fasterxml.jackson.core/groupId
artifactIdjackson-databind/artifactId
version$/version
/dependency
!-- 配置文件上傳相關 --
dependency
groupIdcommons-fileupload/groupId
artifactIdcommons-fileupload/artifactId
version$/version
/dependency
!-- https://mvnrepository.com/artifact/commons-io/commons-io --
dependency
groupIdcommons-io/groupId
artifactIdcommons-io/artifactId
version$/version
/dependency
!-- 配置hibernate相關 --
!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --
dependency
groupIdorg.hibernate/groupId
artifactIdhibernate-core/artifactId
version$/version
/dependency
!-- 配置Spring整合Hibernate相關 --
!-- https://mvnrepository.com/artifact/org.springframework/spring-orm --
dependency
groupIdorg.springframework/groupId
artifactIdspring-orm/artifactId
version$/version
/dependency
!-- 配置fastJson相關 --
!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --
```
```xml
dependency
groupIdcom.alibaba/groupId
artifactIdfastjson/artifactId
version$/version
/dependency
```
```xml
/dependencies
!-- 配置插件相關 --
!-- 設置項目的編譯版本 --
build
plugins
plugin
groupIdorg.apache.maven.plugins/groupId
artifactIdmaven-compiler-plugin/artifactId
configuration
source1.8/source
target1.8/target
encoding$/encoding
/configuration
/plugin
/plugins
pluginManagement
plugins
!-- 配置Tomcat插件 tomcat7:run tomcat:run --
plugin
groupIdorg.apache.tomcat.maven/groupId
artifactIdtomcat7-maven-plugin/artifactId
version2.2/version
configuration
path/ssh/path
port8080/port
uriEncoding$/uriEncoding
/configuration
/plugin
/plugins
/pluginManagement
```
/build
/project
## 2.把一些必要的配置文件正過來
2.1整合需要的配置文件:
1.jdbc.properties
2.log4j.properties
3.Springmvc的配置文件
4.hibernate的配置文件
(不使用jpa的註解 hibernate的映射文件。)
5.web.xml配置文件
## 3.Spring和hibernate和SpringMvc開始進行整合
hibernate是dao層的框架
SpringMvc是web層框架
Spring是一個容器管理,用來管理和集成其他層的框架的。
###3.1.Spring整合web層
SpringMVC的配置文件讓dispatcherServlet去載入:
SpringMVC的配置文件:spring-mvc.xml
```xml
?xml version=1.0 encoding=UTF-8?
beansxmlns=http://www.springframework.org/schema/beans
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:p=http://www.springframework.org/schema/p
xmlns:context=http://www.springframework.org/schema/context
xmlns:aop=http://www.springframework.org/schema/aop
xmlns:tx=http://www.springframework.org/schema/tx
xmlns:mvc=http://www.springframework.org/schema/mvc
xsi:schemaLocation=
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
!-- 開發SpringMvc的配置文件 --
!-- 開啟組件掃描 --
context:component-scan base-package=com.qf.controller/context:component-scan
mvc:annotation-driven/mvc:annotation-driven
bean class=org.springframework.web.servlet.view.InternalResourceViewResolver
property name=prefix value=/WEB-INF/jsp//property
property name=suffix value=.jsp /property
/bean
!-- 用來過濾靜態資源法 --
mvc:resources location=/static/ mapping=/static/**/mvc:resources
!-- 配置文件上傳相關 --
bean id=multipartResolver class=org.springframework.web.multipart.commons.CommonsMultipartResolver
p:defaultEncoding=utf-8
p:maxUploadSize=1048576
p:uploadTempDir=file:D: emp
/bean
/beans
```
web.xml配置
```xml
servlet
servlet-nameDispatcherServlet/servlet-name
servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class
init-param
!-- contextConfigLocation固定 --
param-namecontextConfigLocation/param-name
param-valueclasspath:applicationContext-springmvc.xml/param-value
/init-param
!-- 啟動伺服器就實例化 --
load-on-startup1/load-on-startup
/servlet
servlet-mapping
servlet-nameDispatcherServlet/servlet-name
!-- 1./* 攔截所有請求 css img js jsp html action 2.*.action/*.do *.action 可以攔截以.action結尾的請求
3./ 攔截css js image action請求 不攔截jsp(推薦) --
url-pattern//url-pattern
/servlet-mapping
!-- SPring解決POST請求亂碼 --
filter
filter-namecharacterEncodingFilter/filter-name
filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class
init-param
param-nameencoding/param-name
param-valueUTF-8/param-value
/init-param
init-param
param-nameforceEncoding/param-name
param-valuetrue/param-value
/init-param
/filter
filter-mapping
filter-namecharacterEncodingFilter/filter-name
url-pattern/*/url-pattern
/filter-mapping
```
```xml
!-- form表單只支持 Get和POST如果想支持rest風格得配置該過濾器然後該過濾器會幫我們實現 --
filter
filter-nameHiddenHttpMethodFilter/filter-name
filter-class
org.springframework.web.filter.HiddenHttpMethodFilter
/filter-class
/filter
filter-mapping
filter-nameHiddenHttpMethodFilter/filter-name
url-pattern/*/url-pattern
/filter-mapping
```
Spring的配置文件讓org.springframework.web.context.ContextLoaderListener該監聽器去載入
```xml
listener
!-- 默認是去WEB-INF下找 applicationContext.xml配置文件--
listener-classorg.springframework.web.context.ContextLoaderListener/listener-class
/listener
context-param
param-namecontextConfigLocation/param-name
param-valueclasspath:applicationContext-*.xml/param-value
/context-param
```
###3.2.Spring整合dao層
(hibernate.cfg.xml配置文件不要了。裡面的東西要全部寫到Spring配置文件中去)
applicationContext-dao.xml
配置數據源,整合hibernate
```xml
?xml version=1.0 encoding=UTF-8?
beansxmlns=http://www.springframework.org/schema/beans
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:p=http://www.springframework.org/schema/p
xmlns:context=http://www.springframework.org/schema/context
xmlns:aop=http://www.springframework.org/schema/aop
xmlns:tx=http://www.springframework.org/schema/tx
xmlns:mvc=http://www.springframework.org/schema/mvc
xsi:schemaLocation=
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
!-- 開發SpringMvc的配置文件 --
!-- 開啟組件掃描 --
context:component-scan base-package=com.qf.dao/context:component-scan
!-- 載入jdbc.properties配置文件 --
context:property-placeholder location=classpath:jdbc.properties/
!-- 配置C3P0連接池 --
bean id=dataSource class=com.mchange.v2.c3p0.ComboPooledDataSource
property name=user value=$/property
property name=password value=$/property
property name=jdbcUrl value=$/property
property name=driverClass value=$/property
property name=maxPoolSize value=$/property
property name=initialPoolSize value=$/property
/bean
```
```xml
!-- 配置SessionFactory --
bean id=sessionFactory class=org.springframework.orm.hibernate5.LocalSessionFactoryBean
!-- 注入數據源 --
property name=dataSource ref=dataSource/property
property name=hibernateProperties
props
prop key=hibernate.show_sqltrue/prop
prop key=hibernate.format_sqltrue/prop
prop key=hibernate.hbm2ddl.autoupdate/prop
prop key=hibernate.dialectorg.hibernate.dialect.MySQL5InnoDBDialect/prop
prop key=hibernate.connection.isolation4/prop
!-- session與當前線程綁定不能配置事務交給了spring管理 --
/props
/property
!-- xml方式 --
!-- property name=mappingResources
list
valueUser1.hb.xml/value
valueUser2.hb.xml/value
valueUser3.hb.xml/value
valueUser4.hb.xml/value
/list
/property --
!-- 掃描實體類所在的包 --
property name=packagesToScan
list
valuecom.qf.model/value
/list
/property
/bean
/beans
```
### 3.3.Spring整合Service層
applicationContext-service.xml
配置事務相關
```java
?xml version=1.0 encoding=UTF-8?
beansxmlns=http://www.springframework.org/schema/beans
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:p=http://www.springframework.org/schema/p
xmlns:context=http://www.springframework.org/schema/context
xmlns:aop=http://www.springframework.org/schema/aop
xmlns:tx=http://www.springframework.org/schema/tx
xmlns:mvc=http://www.springframework.org/schema/mvc
xsi:schemaLocation=
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
!-- 開發SpringMvc的配置文件 --
!-- 開啟組件掃描 --
context:component-scan base-package=com.qf.service/context:component-scan
!-- 配置事務 --
!-- 配置平台事務管理器 --
bean id=transactionManager class=org.springframework.orm.hibernate5.HibernateTransactionManager
!-- 現在注入SessionFactory --
property name=sessionFactory ref=sessionFactory/property
/bean
```
```xml
!-- 配置事務通知 --
tx:advice id=txAdvice transaction-manager=transactionManager
tx:attributes
tx:method name=select* propagation=SUPPORTS read-only=true/
tx:method name=query* propagation=SUPPORTS read-only=true/
tx:method name=find* propagation=SUPPORTS read-only=true/
tx:method name=search* propagation=SUPPORTS read-only=true/
tx:method name=get* propagation=SUPPORTS read-only=true/
tx:method name=add* propagation=REQUIRED /
tx:method name=save* propagation=REQUIRED /
tx:method name=insert* propagation=REQUIRED /
tx:method name=delete* propagation=REQUIRED /
tx:method name=update* propagation=REQUIRED /
tx:method name=modify* propagation=REQUIRED /
tx:method name=remove* propagation=REQUIRED /
/tx:attributes
/tx:advice
!-- 配置aop --
aop:config proxy-target-class=true
aop:pointcut expression=execution( public * com.qf.service.impl.*.*(..)) id=cut/
aop:advisor advice-ref=txAdvice pointcut-ref=cut/
/aop:config
/beans
```
## 4.編寫 dao,service,Controller進行測試
## 4.1.Controller層
package com.qf.controller;
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.qf.model.User;
import com.qf.service.UserService;
@Controller
@RequestMapping(/user)
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(/save)
public String add(User user) {
//調用Service保存
boolean flag = userService.save(user);
if(flag){
return success;
}
return error;
}
}
```
## 4.2.Servicer層
package com.qf.service;
import com.qf.model.User;
public interface UserService {
boolean save(User user);
}
package com.qf.service.impl;
import javax.management.RuntimeErrorException;
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import com.qf.dao.UserDao;
import com.qf.model.User;
import com.qf.service.UserService;
@Service
public class UserServiceImplimplements UserService{
@Autowired
private UserDao userDao;
@SuppressWarnings(finally)
@Override
public boolean save(User user) {
// TODO Auto-generated method stub
boolean flag=true;
try {
userDao.add(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
flag=false;
System.out.println(===============================exception);
//TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滾事務
throw new RuntimeException();
}
return flag;
}
}
```
## 4.3.Dao層
package com.qf.dao;
import com.qf.model.User;
public interface UserDao {
voidadd(User user);
}
package com.qf.dao.impl;
```java
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.qf.dao.UserDao;
import com.qf.model.User;
@Repository
public class UserDaoImplimplements UserDao{
@Autowired
private SessionFactory sessionFactory;
```
```java
@Override
public void add(User user) {
// TODO Auto-generated method stub
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
}
```


TAG:千鋒JAVA開發學院 |