當前位置:
首頁 > 最新 > Spring4+hibernate+SpringMvc整合

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);

}

}

```


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

Spring整合Hibernate.Final

TAG:千鋒JAVA開發學院 |