maven配置spring mvc+hibernate+spring框架

时间:2023-03-09 15:47:49
maven配置spring mvc+hibernate+spring框架

作为一名刚出茅草屋的新手小白写的框架,仅适合新手小白借鉴,大神勿喷,谢谢......

前天刚知道spring mvc这个框架现在也很流行,决定用它代替struts2来写我的毕业设计。

...作为一名新手小白,钻研了俩天,稀里糊涂的继续运行测试,竟然测试通过了...太神奇了...目录真是比以前的干净了多少.

只是一个框架,并没有开始写java类...(其实spring mvc怎么替代struts2控制,正在学习中...)

我用的myeclipse2014,创建web项目,加maven支持。

废话少说,看下面:

目录结构:(名称显示功能很明确,不想说话,自己看)

maven配置spring mvc+hibernate+spring框架                                   maven配置spring mvc+hibernate+spring框架

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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>myReply</groupId>
     <artifactId>myReply</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>war</packaging>
     <name>myReply</name>
     <description />
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <spring.version>4.2.0.RELEASE</spring.version>
         <hibernate.version>4.3.5.Final</hibernate.version>
         <aspectjweaver.version>1.8.4</aspectjweaver.version>
     </properties>

     <dependencies>
         <!-- jsp-servlet支持 -->
         <dependency>
             <groupId>org.apache.tomcat</groupId>
             <artifactId>tomcat-servlet-api</artifactId>
             <version>7.0.59</version>
             <scope>provided</scope>
         </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-aspects</artifactId>
             <version>${spring.version}</version>
         </dependency>
         <dependency>
             <groupId>org.aspectj</groupId>
             <artifactId>aspectjweaver</artifactId>
             <version>${aspectjweaver.version}</version>
         </dependency>
         <!-- 测试时需要而发布时不需要 spring与junit结合 -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <version>${spring.version}</version>
             <scope>test</scope>
         </dependency>
         <!-- 关系型数据库整合时需配置 如hibernate jpa等 -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-orm</artifactId>
             <version>${spring.version}</version>
         </dependency>

         <!-- 使用SpringMVC配置 -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
             <version>${spring.version}</version>
         </dependency>

         <!-- hibernate -->
         <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-core</artifactId>
             <version>${hibernate.version}</version>
         </dependency>

         <!-- json -->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.3</version>
         </dependency>

         <!-- log4j -->
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <version>1.2.17</version>
         </dependency>
         <dependency>
             <groupId>net.sf.json-lib</groupId>
             <artifactId>json-lib</artifactId>
             <version>2.3</version>
             <classifier>jdk15</classifier>
         </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>

     </dependencies>
     <build>
         <plugins>
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>2.3.2</version>
                 <configuration>
                     <source>1.7</source>
                     <target>1.7</target>
                 </configuration>
             </plugin>
         </plugins>
     </build>
 </project>

web.xml(在WEB-INF下面,不用说太清楚吧)

 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     id="WebApp_ID" version="3.1">

     <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>

     <!-- ************spring基础配置*************************** -->
     <context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:spring*.xml</param-value>
     </context-param>

     <listener>
         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>

     <!-- spring mvc -->
     <servlet>
         <servlet-name>spring-mvc</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:spring-mvc-servlet.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
         <servlet-name>spring-mvc</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>

     <!-- spring 字符编码配置 -->
     <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>

 </web-app>

db.properties

 #jdbc.c3p0.config
 jdbc.driver=com.mysql.jdbc.Driver
 jdbc.url=jdbc:mysql://127.0.0.1:3306/myReplyDB?useUnicode=true&amp;characterEncoding=utf-8
 jdbc.user=root
 jdbc.password=123456
 jdbc.maxPoolSize=50
 jdbc.minPoolSize=2
 jdbc.initialPoolSize=2
 jdbc.maxIdleTime=20

spring.xml(相当于spring的applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.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/context
             http://www.springframework.org/schema/context/spring-context.xsd">

     <context:annotation-config />

     <!-- 自动扫描所有注解 注册为bean (启动注解) -->
     <context:component-scan base-package="com.myReply">
         <context:exclude-filter type="annotation"
          expression="org.springframework.stereotype.Controller" />
     </context:component-scan>

     <import resource="spring-hibernate.xml" />

 </beans>

spring-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:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.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/context
             http://www.springframework.org/schema/context/spring-context.xsd">

     <!-- 引入属性文件:扫描数据库配置文件 -->
     <context:property-placeholder location="classpath:db.properties" />

     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
         <property name="driverClass" value="${jdbc.driver}"></property>
         <property name="jdbcUrl" value="${jdbc.url}"></property>
         <property name="user" value="${jdbc.user}"></property>
         <property name="password" value="${jdbc.password}"></property>
         <!-- 设置数据库连接池的最大连接数 -->
         <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
         <!-- 设置数据库连接池的最小连接数 -->
         <property name="minPoolSize" value="${jdbc.minPoolSize}"></property>
         <!-- 设置数据库连接池的初始化连接数 -->
         <property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
         <!-- 设置数据库连接池的连接的最大空闲时间,单位为秒 -->
         <property name="maxIdleTime" value="${jdbc.maxIdleTime}"></property>
     </bean>

     <bean id="sessionFactory"
         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
         <property name="dataSource" ref="dataSource"></property>
         <property name="packagesToScan" value="com.myReply.bean"></property>
         <property name="hibernateProperties">
             <props>
                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                 <prop key="hibernate.show_sql">true</prop>
                 <prop key="hibernate.hbm2ddl.auto">update</prop>
                 <!-- 设置Hibernate一个提交批次中的最大SQL语句数 -->
                 <prop key="hibernate.jdbc.batch_size">50</prop>
                 <!-- 缓存 -->
                 <!-- <prop key="cache.use_query_cache">true</prop>
                 <prop key="cache.use_second_level_cache">true</prop>
                 <prop key="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory
                 </prop> -->
             </props>
         </property>
     </bean>

     <!-- hibernate事务管理器 -->
     <bean id="transactionManager"
         class="org.springframework.orm.hibernate4.HibernateTransactionManager">
         <property name="sessionFactory" ref="sessionFactory"></property>
         <!-- <property name="dataSource" value="dataSource"></property> -->
     </bean>

     <!-- 配置事务的传播范围 -->
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
         <!-- 定义方法的过滤规则 -->
         <tx:attributes>
             <tx:method name="add*" propagation="REQUIRED" />
             <tx:method name="insert*" propagation="REQUIRED" />
             <tx:method name="save*" propagation="REQUIRED" />
             <tx:method name="create*" propagation="REQUIRED" />
             <tx:method name="update*" propagation="REQUIRED" />
             <tx:method name="modify*" propagation="REQUIRED" />
             <tx:method name="delete*" propagation="REQUIRED" />
             <tx:method name="remove*" propagation="REQUIRED" />
             <!-- 所有以...开头的业务逻辑方法均不需要事务控制且只读 -->
             <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="fetch*" propagation="SUPPORTS" read-only="true" />
             <tx:method name="list*" propagation="SUPPORTS" read-only="true" />
             <tx:method name="check*" propagation="SUPPORTS" read-only="true" />
         </tx:attributes>
     </tx:advice>

     <!-- 配置事务的切入点 -->
     <aop:config expose-proxy="true" proxy-target-class="true">
         <!-- 定义一个事务切入点,拦截com.myReply.service.impl包中所有类的所有方法 -->
         <aop:pointcut id="txPointcut"
             expression="execution(* com.myReply.service.Impl.*.*(..))" />
         <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice" />
     </aop:config>

 </beans>

spring-mvc-servlet.xml(相当于struts2.xml,不过不用再写各种action了,因为spring mvc全部用注释来替代了)

 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
     xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     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
             ">

     <!-- DispatcherServlet上下文,只管理@Controller类型的bean,忽略其它类型的bean,如@Service -->
     <context:component-scan base-package="com.myReply"
         use-default-filters="false">
         <context:include-filter type="annotation"
             expression="org.springframework.stereotype.Controller" />
     </context:component-scan>

     <!--扩展了注解驱动,可以将请求参数绑定到控制器参数 如: 把标记了@Controller注解的类转换为bean -->
     <mvc:annotation-driven>
         <!-- spring解析返回结果成json -->
         <mvc:message-converters register-defaults="true">
             <bean
                 class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                 <property name="supportedMediaTypes" value="application/json" />
             </bean>
         </mvc:message-converters>
     </mvc:annotation-driven>

     <!-- 对静态资源文件的访问: js , css , imgs -->
     <mvc:resources mapping="/resources/**" location="/resources/" />

     <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 可以配置多个ViewResolver,使用order属性排序,但InternalResourceViewResolver放在最后 -->
     <bean id="ViewResolver"
         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/"></property>
         <property name="suffix" value=".jsp"></property>
     </bean>
 </beans>

不会写log4j,因为不会......额,junit也刚开始学,测试就是加入tomcat运行呗.....泪奔、

说实话,现在刚实习一个多月,在学校学到的东西到公司大概就能用到30%,至少我是这样,

不过这30%必不可少,因为如果你不会,你可能连代码、框架都看不懂,更何况去写了。

好了,如果不会,全部复制粘贴,理理思路,我继续学习,如果你看不懂,我明确告诉你:别问我,我也就比你懂那么一丝丝......