Spring4 +hibernate5.2.10+SpringMvc+maven整合

# Spring4 +hibernate5.2.10+SpringMvc+maven整合



## 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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.qf</groupId>
    <artifactId>ssh</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <spring.version>4.2.8.RELEASE</spring.version>
        <gson.version>2.8.0</gson.version>
        <servlet.version>3.1.0</servlet.version>
        <jsp.version>2.1</jsp.version>
        <mysql.version>5.1.38</mysql.version>
        <c3p0.version>0.9.1.2</c3p0.version>
        <log4j.version>1.2.17</log4j.version>
        <jstl.version>1.2</jstl.version>
        <jackson.version>2.8.9</jackson.version>
        <fileupload.version>1.3.1</fileupload.version>
        <common.io.version>2.4</common.io.version>
        <hibernate.version>5.2.10.Final</hibernate.version>
        <project.encoding>UTF-8</project.encoding>
        <fastjson.version>1.2.46</fastjson.version>

    </properties>

    <!-- 配置所有依赖 -->
    <dependencies>

        <!-- 配置servlet相关 -->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- 配置JSP相关 -->
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- 配置JSTL相关 -->
        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <!-- 配置数据库驱动相关 -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
```


```xml
        <!-- 配置spring相关 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- 配置事务相关 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- 配置spring-jdbc -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 诶只spring-test -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- 配置AspectJ 相关 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 配置SpringMvc相关 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
```


​    
```xml
        <!-- 配置Log4J相关 -->
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- c3p0连接池 -->
        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>
        <!-- 配置Gson -->

        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${gson.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <!-- SpringMvc内置的jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <!-- 配置文件上传相关 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${fileupload.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${common.io.version}</version>
        </dependency>

        <!-- 配置hibernate相关 -->
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- 配置Spring整合Hibernate相关 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <!-- 配置fastJson相关 -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
```


```xml
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
```


​    
​    
​    
```xml
    </dependencies>
    <!-- 配置插件相关 -->
    <!-- 设置项目的编译版本 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>${project.encoding}</encoding>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <!-- 配置Tomcat插件 tomcat7:run tomcat:run -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <path>/ssh</path>
                        <port>8080</port>
                        <uriEncoding>${project.encoding}</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"?>
<beans  xmlns="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:\temp"
           >
    
           </bean>
       </beans>
```

web.xml配置

```xml
<servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!-- contextConfigLocation固定 -->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext-springmvc.xml</param-value>
        </init-param>
        <!-- 启动服务器就实例化 -->
        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>
        <servlet-name>DispatcherServlet</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-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
```


```xml
<!-- form表单只支持 Get和POST  如果想支持rest风格  得配置该过滤器  然后该过滤器会帮我们实现 -->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.HiddenHttpMethodFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
```



Spring的配置文件让org.springframework.web.context.ContextLoaderListener该监听器去加载


```xml
    <listener>
    <!-- 默认是去WEB-INF下找 applicationContext.xml配置文件-->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
    </listener>  
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath: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"?>
<beans  xmlns="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="${jdbc.username}"></property>
                   <property name="password" value="${jdbc.password}"></property>
                   <property name="jdbcUrl" value="${jdbc.url}"></property>
                   <property name="driverClass" value="${jdbc.driver}"></property>
                   <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
                   <property name="initialPoolSize" value="${jdbc.initialPoolSize}"></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_sql">true</prop>
                       <prop key="hibernate.format_sql">true</prop>
                       <prop key="hibernate.hbm2ddl.auto">update</prop>
                       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                       <prop key="hibernate.connection.isolation">4</prop>
                   <!-- session与当前线程绑定不能配置  事务交给了spring管理 -->
                       
                   </props>
               
               </property>
               <!-- xml方式 -->
               <!-- <property name="mappingResources">
                   <list>
                       <value>User1.hb.xml</value>
                       <value>User2.hb.xml</value>
                       <value>User3.hb.xml</value>
                       <value>User4.hb.xml</value>
                   </list>
               </property> -->
               
               <!-- 扫描实体类所在的包 -->
               <property name="packagesToScan">
                   <list>
                       <value>com.qf.model</value>
                   </list>
               </property>
           </bean>
       
       </beans>
```





















### 3.3.Spring整合Service层

applicationContext-service.xml

配置事务相关

```java
<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="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 UserServiceImpl  implements 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 {

        void  add(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 UserDaoImpl  implements UserDao{
    
    @Autowired
    private SessionFactory sessionFactory;
```


```java
    @Override
    public void add(User user) {
        // TODO Auto-generated method stub
        Session session = sessionFactory.getCurrentSession();
        session.save(user);
        
    }

}
```


猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/80227239