maven 整合spring+springmvc+hibernate

来源:互联网 发布:linux openssl安装 编辑:程序博客网 时间:2024/05/22 14:31

1.配置3个xml文件

web.xml
web.xml主要配置:ContextLoaderListener和DispatcherServer,代码如下:

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">    <!-- 配置web.xml,使其具有springmvc特性,主要配置两处,一个是ContextLoaderListener,一个是DispatcherServlet -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext.xml</param-value>    </context-param>     <!--防止发生java.beans.Introspector内存泄露,应将它配置在ContextLoaderListener的前面            详细描述见http://blog.csdn.net/jadyer/article/details/11991457  -->  <listener>    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  </listener>    <!-- 配置ContextLoaderListener表示,该工程要以spring的方式启动。启动时会默认在/WEB-INF目录下查找applicationContext.xml作为spring容器的配置文件,该文件里可以初始化一些bean -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>   <!-- spring mvc 配置 -->    <!-- 配置DispatcherServlet表示,该工程将采用springmvc的方式。启动时也会默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件,        XXX就是DispatcherServlet的名字,该文件中将配置两项重要的mvc特性:HandlerMapping,负责为DispatcherServlet这个前端控制器的请求查找Controller;        ViewResolver,负责为DispatcherServlet查找ModelAndView的视图解析器。        此处使用指定的配置文件spring-mvc.xml -->    <servlet>        <servlet-name>Dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>              <param-name>contextConfigLocation</param-name>              <!--<param-value>/WEB-INF/classes/spring-mvc-servlet.xml</param-value>-->            <param-value>classpath*:/spring-mvc.xml</param-value>        </init-param>          <load-on-startup>1</load-on-startup>      </servlet>    <servlet-mapping>        <servlet-name>Dispatcher</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping>    <filter>       <filter-name>SpringOpenSessionInViewFilter</filter-name>       <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>        <init-param>      <param-name>singleSession</param-name>      <param-value>true</param-value>    </init-param>    <init-param>      <param-name>sessionFactoryBeanName</param-name>      <param-value>sessionFactory</param-value>    </init-param>     </filter>  <filter-mapping>    <filter-name>SpringOpenSessionInViewFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>    <!-- 字符集过滤器 -->      <filter>        <filter-name>encodingFilter</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>    </filter>    <filter-mapping>        <filter-name>encodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>     <!-- 加载Log4j的配置****begin -->  <context-param>    <param-name>log4jConfigLocation</param-name>    <param-value>classpath:log4j.properties</param-value>  </context-param>  <listener>    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  </listener>  <!-- 加载Log4j的配置****end -->    <welcome-file-list>          <welcome-file>index.jsp</welcome-file>      </welcome-file-list>  </web-app>

applicationContext.xml
配置ContextLoaderListener表示,该工程要以spring的方式启动。启动时会默认在/WEB-INF目录下查找 applicationContext.xml作为spring容器的配置文件,这里可以初始化一些bean,如DataSource等。代码如下:

<?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:tx="http://www.springframework.org/schema/tx"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd        http://www.springframework.org/schema/context            http://www.springframework.org/schema/context/spring-context-4.1.xsd">    <!-- 属性文件位置 -->    <bean id="annotationPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="locations">            <list>                <value>classpath:config.properties</value>            </list>        </property>    </bean>      <!-- 开启注解扫描,但不扫描controller,controller有springmvc扫描,防止mvc事物失效 -->     <context:component-scan base-package="com.chess.test">        <context:exclude-filter type="annotation"        expression="org.springframework.stereotype.Controller"/>    </context:component-scan>    <!-- 配置数据源 c3p0 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"          destroy-method="close">        <property name="driverClass" value="${jdbc.driver}" />        <property name="jdbcUrl" value="${jdbc.url}" />        <property name="user" value="${jdbc.username}" />        <property name="password" value="${jdbc.password}" />        <!-- 请求超时时间 -->        <property name="checkoutTimeout" value="30000" />        <!-- 每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->        <property name="idleConnectionTestPeriod" value="30" />        <!-- 连接数据库连接池最大空闲时间 -->        <property name="maxIdleTime" value="30" />        <!-- 连接池初始化连接数 -->        <property name="initialPoolSize" value="5" />        <property name="minPoolSize" value="5" />        <property name="maxPoolSize" value="20" />        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->        <property name="acquireIncrement" value="5" />    </bean>    <!-- 配置hibernate的SessionFactory -->            <bean id="sessionFactory"          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">        <!-- 注入数据源 相关信息看源码 -->        <property name="dataSource" ref="dataSource" />        <!-- hibernate配置信息 -->        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">${hibernate.dialect}</prop>                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>                <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>                <!-- 开启二级缓存 ehcache -->                <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>                <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>                <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop>                <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.cache.provider_configuration_file_resource_path}                </prop>            </props>        </property>        <!-- 扫描hibernate注解配置的entity -->        <property name="packagesToScan" value="com.chess.test.model" />    </bean>    <!-- 配置事务管理器 -->    <bean id="transactionManager"          class="org.springframework.orm.hibernate4.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" />    </bean>    <tx:annotation-driven transaction-manager="transactionManager"/></beans>

spring-mvc.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:context="http://www.springframework.org/schema/context"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd            http://www.springframework.org/schema/context            http://www.springframework.org/schema/context/spring-context-4.1.xsd            http://www.springframework.org/schema/mvc            http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">    <!-- 启用spring mvc 注解 -->    <context:annotation-config />      <!-- 扫描注解  只扫描controller,防止service层事物失效-->    <context:component-scan base-package="com.chess.test.controller"/>    <!-- 处理请求时返回json字符串的中文乱码问题 -->    <mvc:annotation-driven>        <mvc:message-converters>            <bean class="org.springframework.http.converter.StringHttpMessageConverter">                <property name="supportedMediaTypes">                    <list>                        <value>application/json;charset=UTF-8</value>                    </list>                </property>            </bean>        </mvc:message-converters>    </mvc:annotation-driven>    <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->    <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">        <property name="supportedMediaTypes">            <list>                <value>text/html;charset=UTF-8</value>            </list>        </property>    </bean>    <!-- 跳转视图配置 -->    <bean name="viewResolver"          class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="viewClass"><!-- 跳转到JSP的视图 -->            <value>org.springframework.web.servlet.view.JstlView</value>        </property>        <!-- 相关JSP页面路径配置 -->        <property name="prefix"><!-- JSP页面前缀 -->            <value>/WEB-INF/jsp/</value>        </property>        <property name="suffix"><!-- JSP页面后缀 -->            <value>.jsp</value>        </property>    </bean>    <bean name="multipartResolver"          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <property name="defaultEncoding" value="UTF-8" />    </bean></beans>

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">    <diskStore path="java.io.tmpdir"/>    <!-- DefaultCache setting. -->    <defaultCache            maxElementsInMemory="1000"            eternal="false"            timeToIdleSeconds="120"            timeToLiveSeconds="120"            maxElementsOnDisk="1000000"            overflowToDisk="true"            memoryStoreEvictionPolicy="LRU">    </defaultCache></ehcache>

config.properties

#application configs#jdbc c3p0 configjdbc.driver = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8jdbc.username = rootjdbc.password = root#hibernate confighibernate.dialect = org.hibernate.dialect.MySQLDialecthibernate.show_sql = truehibernate.format_sql = falsehibernate.hbm2ddl.auto = updatehibernate.cache.use_second_level_cache = falsehibernate.cache.use_query_cache = falsehibernate.current_session_context_class=threadhibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactoryhibernate.cache.provider_configuration_file_resource_path = ehcache.xml

log4j.properties

### set log levels ###log4j.rootLogger = DEBUG### console ###log4j.appender.C = org.apache.log4j.ConsoleAppenderlog4j.appender.C.Target = System.outlog4j.appender.C.layout = org.apache.log4j.PatternLayoutlog4j.appender.C.layout.ConversionPattern = [springHibernate][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

2.添加必须的包依赖到pom.xml

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>  <groupId>com.chess</groupId>  <artifactId>test</artifactId>  <packaging>war</packaging>  <version>0.0.1-SNAPSHOT</version>  <name>pass Maven Webapp</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF8</project.build.sourceEncoding>    <spring.version>4.1.5.RELEASE</spring.version>    <hibernate.version>4.3.8.Final</hibernate.version>    <jackson.version>2.5.0</jackson.version>    <slf4j-version>1.7.5</slf4j-version>  </properties>  <dependencies>    <dependency>      <groupId>commons-beanutils</groupId>      <artifactId>commons-beanutils</artifactId>      <version>1.8.3</version>    </dependency>    <dependency>      <groupId>commons-collections</groupId>      <artifactId>commons-collections</artifactId>      <version>3.2.1</version>    </dependency>    <dependency>      <groupId>commons-fileupload</groupId>      <artifactId>commons-fileupload</artifactId>      <version>1.2.1</version>    </dependency>    <dependency>      <groupId>commons-io</groupId>      <artifactId>commons-io</artifactId>      <version>1.4</version>    </dependency>    <dependency>      <groupId>commons-lang</groupId>      <artifactId>commons-lang</artifactId>      <version>2.4</version>    </dependency>    <dependency>      <groupId>org.apache.commons</groupId>      <artifactId>commons-lang3</artifactId>      <version>3.1</version>    </dependency>    <dependency>      <groupId>commons-logging</groupId>      <artifactId>commons-logging</artifactId>      <version>1.1.1</version>    </dependency>    <dependency>      <groupId>commons-pool</groupId>      <artifactId>commons-pool</artifactId>      <version>1.6</version>    </dependency>    <!--junit-->    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.11</version>      <scope>test</scope>    </dependency>    <!-- spring -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-beans</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-tx</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-test</artifactId>      <version>${spring.version}</version>      <scope>test</scope>    </dependency>    <!-- 使用SpringMVC需配置 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>${spring.version}</version>    </dependency>    <!-- 关系型数据库整合时需配置 如hibernate jpa等 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-orm</artifactId>      <version>${spring.version}</version>    </dependency>    <!-- hibernate -->    <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-core</artifactId>      <version>${hibernate.version}</version>    </dependency>    <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-ehcache</artifactId>      <version>${hibernate.version}</version>    </dependency>    <!-- 二级缓存ehcache -->    <dependency>      <groupId>net.sf.ehcache</groupId>      <artifactId>ehcache</artifactId>      <version>2.9.0</version>    </dependency>    <!-- log4j -->    <dependency>      <groupId>log4j</groupId>      <artifactId>log4j</artifactId>      <version>1.2.17</version>    </dependency>    <!--slf4j-->    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>${slf4j-version}</version>      <scope>runtime</scope>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>jcl-over-slf4j</artifactId>      <version>${slf4j-version}</version>      <scope>runtime</scope>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-simple</artifactId>      <version>${slf4j-version}</version>      <scope>runtime</scope>    </dependency>    <!-- mysql连接 -->    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.34</version>    </dependency>    <!-- c3p0数据源 -->    <dependency>      <groupId>com.mchange</groupId>      <artifactId>c3p0</artifactId>      <version>0.9.5-pre10</version>    </dependency>    <!-- json -->    <dependency>      <groupId>com.alibaba</groupId>      <artifactId>fastjson</artifactId>      <version>1.2.3</version>    </dependency>    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-annotations</artifactId>      <version>${jackson.version}</version>    </dependency>    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-core</artifactId>      <version>${jackson.version}</version>    </dependency>    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-databind</artifactId>      <version>${jackson.version}</version>    </dependency>    <!-- aop -->    <dependency>      <groupId>org.aspectj</groupId>      <artifactId>aspectjweaver</artifactId>      <version>1.8.4</version>    </dependency>    <!-- servlet -->    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>servlet-api</artifactId>      <version>3.0-alpha-1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>jstl</artifactId>      <version>1.2</version>    </dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>4.1.5.RELEASE</version>    </dependency>  </dependencies>  <build>    <finalName>test</finalName>  </build></project>

3.写一个简单的新增功能验证项目

AcctUser.java

package com.chess.test.model;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;import org.hibernate.annotations.Cache;import org.hibernate.annotations.CacheConcurrencyStrategy;/** * AcctUser generated by hbm2java */@Entity@Table(name = "acct_user")public class AcctUser implements java.io.Serializable {    /**     *      */    private static final long serialVersionUID = 6980093847795726310L;    private Long id;    private String nickName;    private String telephone;    private Date registerTime;    public AcctUser() {    }    public AcctUser(Long id, String nickName) {        this.id = id;        this.nickName = nickName;    }    public AcctUser(Long id, String nickName, String telephone,            Date registerTime) {        this.id = id;        this.nickName = nickName;        this.telephone = telephone;        this.registerTime = registerTime;    }    @Id    @Column(name = "id", unique = true, nullable = false, length = 36)    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    @Column(name = "nick_name", nullable = false)    public String getNickName() {        return this.nickName;    }    public void setNickName(String nickName) {        this.nickName = nickName;    }    @Column(name = "telephone")    public String getTelephone() {        return this.telephone;    }    public void setTelephone(String telephone) {        this.telephone = telephone;    }    @Temporal(TemporalType.TIMESTAMP)    @Column(name = "register_time", length = 19)    public Date getRegisterTime() {        return this.registerTime;    }    public void setRegisterTime(Date registerTime) {        this.registerTime = registerTime;    }}

UserDao.java

package com.chess.test.dao;import java.util.List;import com.chess.test.model.AcctUser;public interface UserDao {    /**     * 查询所有菜单     * @return     */     List<AcctUser> getAllList();}

UserDaoImpl.java

package com.chess.test.dao.impl;import java.util.List;import org.springframework.stereotype.Repository;import com.chess.test.dao.UserDao;import com.chess.test.model.AcctUser;@SuppressWarnings("unchecked")@Repository("userDao")public class UserDaoImpl implements UserDao {    @Override    public List<AcctUser> getAllList() {        List<AcctUser> list = getListByHQL("from AcctUser");        return list;    }}

Test.java

package com.chess.test.test;import java.util.Date;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.junit.runner.RunWith;import com.chess.test.model.AcctUser;import com.chess.test.service.UserService;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration({"classpath:applicationContext.xml","classpath:spring-mvc.xml"})public class UserTest extends AbstractJUnit4SpringContextTests{        @Autowired        private UserService userService;        @Test        public void  addMenu(){            AcctUser user = new AcctUser();            user.setId(2L);            user.setNickName("name");            user.setRegisterTime(new Date());            user.setTelephone("18658556903");             userService.addUser(user);        }}
原创粉丝点击