spring5 mvc+mybatis+maven 整合

 

第一步:创建maven项目

    需要注意的地方:

    1.这里不用勾选

      

 

    2.此处过滤输入webapp

      

  

    3.groupId (包名)、artifactId  (项目名)

 

    4. 项目中index.jsp报错

          缺少servlet-api和jsp-api,可以通过下面任意一种方式解决

          a.可以在pom.xml中添加Servlet的依赖

          b.也可以在构建路径中添加Tomcat的jar包

                  

      5.缺少 src/main/java

            构建路径中,重新编辑下JRE System Library,选择workspace default jre就可以了。

 

      6.修改web.xml的版本

             鼠标对着项目右键,点击Properties,找到Project Facets中的Dynamic Web Module 选项

 

           

           

               然后把  Dynamic Web Module  的勾选去掉,点击apply,如下图:(如果直接选择版本会报错,不要问为什么)

              

              

               接下来选择Dynamic Web Module的版本,然后点击下方的Further configuation available...

             

 

            修改Content directory

             

          最后把web.xml的头信息改过来,更新maven

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


 

第二步:配置pom.xml

<dependencies>
  
          <!-- Spring MVC-->
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.0.1.RELEASE</version>
        </dependency> 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.0.1.RELEASE</version>
        </dependency>
                
        
        <!-- 日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>    
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.3</version>
        </dependency>
        
        <!-- mysql -->
       <!--  <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.26</version>
        </dependency> -->
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        
        
        <!-- jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.2</version>
        </dependency>
        
        <!-- JSON In Java -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>
        
        <!-- 上传 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        <!-- PageHelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.1</version>
        </dependency>
        
        <!-- Swagger -->
        <dependency>
            <groupId>com.mangofactory</groupId>
            <artifactId>swagger-springmvc</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.mangofactory</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.wordnik</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.3.11</version>
           </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>15.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml</groupId>
            <artifactId>classmate</artifactId>
            <version>1.1.0</version>
        </dependency>
        
        <!-- junit -->
        <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
              <scope>test</scope>
        </dependency>
    
    
  </dependencies>

 

第三步:引入配置文件

    需要引入的文件列表:

    1.applicationContext.xml   (spring的核心文件,负责数据源和事物管理) 

<?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-4.2.xsd  
           http://www.springframework.org/schema/aop   
           http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
           http://www.springframework.org/schema/tx  
           http://www.springframework.org/schema/tx/spring-tx-4.2.xsd  
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <!-- 配置要扫描的包 -->
    <context:component-scan base-package="com.qthh.flyl.app.*.service" />

    <!-- 加载属性文件 -->
    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath*:jdbc.properties</value>
            </list>
        </property>
    </bean>


    <!-- 配置数据源,使用 druid -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <!-- 基本属性 url、user、password -->
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- sqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <property name="mapperLocations" value="classpath:mybatis/*.xml" />
        <property name="typeAliasesPackage" value="com.qthh.flyl.app.*.model" />
    </bean>

    <!-- 自动扫描mapper -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.qthh.flyl.app.*.mapper" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

    <!--配置事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 事物管理 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED" read-only="false" />
            <tx:method name="update*" propagation="REQUIRED" read-only="false" />
            <tx:method name="delete*" propagation="REQUIRED" read-only="false" />
            <tx:method name="query*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <!-- 配置哪些类的方法进行事务管理:定义在service包或者子包里的任意方法的执行 -->
        <aop:pointcut id="transactionPointcut"
            expression="execution(* com.qthh.flyl.app.*.service..*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut" />
    </aop:config>

</beans>
View Code

 

    2.spring-mvc.xml  (DispatcherServlet,spring实现mvc就靠这个)  

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

    <!-- 自动扫描Controller -->
    <context:component-scan base-package="com.qthh.flyl.app.*.controller" />

    <!-- 启动注解 spring 3.1 及之后替代 </mvc:annotation-driven> 的配置方式 -->
    <bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />

    <bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>

    <bean id="mappingJackson2HttpMessageConverter"
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
                <value>text/json;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
        <property name="objectMapper">
            <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                <property name="dateFormat">
                    <bean class="java.text.SimpleDateFormat">
                        <constructor-arg type="java.lang.String" value="yyyy-MM-dd" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>


    <!-- 视图解析 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 配置静态资源 -->
    <mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/"/>
    <mvc:resources mapping="/upload/**" location="/upload/" />

    <!-- 加入swagger配置 -->
    <bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />

    <!-- 配置文件上传 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" />
        <property name="maxUploadSize" value="21474836480"/>
        <property name="maxInMemorySize" value="40960" />
    </bean>
    <!-- <bean id="multipartResolver" class="com.always.util.upload.CustomMultipartResolver"> 
        <property name="defaultEncoding" value="utf-8" /> <property name="maxUploadSize" 
        value="10485760000" /> </bean> -->

</beans>
View Code

 

    3.mybatis-config.xml  (mybatis的配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <!-- 使延迟加载生效,必须配置下面两个属性 lazyLoadingEnabled 和 aggressiveLazyLoading -->
        <!-- 全局性设置懒加载,默认ture -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 当设置为false时,每个属性才会按需加载,否则懒加载的对象可能被任何懒属性全部加载 ,默认为true-->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!-- 配置使全局的映射器启用或禁用缓存,默认ture -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 是否允许单条语句返回多个数据集(取决于驱动需求),默认为true -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 是否使用列标签代替列名称,默认为true -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 是否允许JDBC生成主键,默认为false -->
        <setting name="useGeneratedKeys" value="false"/>
        <!-- 指定mybatis是否并且如何来自动映射数据表字段与对象的属性,可选值:PARTIAL:默认值,自动映射简单的,没有嵌套的结果;FULL:自动映射所有复杂的结果;NONE:什么都不做,即不映射; -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <!-- 配置执行器,可选值:SIMPLE:默认值,无特别之处;REUSE:可以重复使用预处理(Prepared Statemnets)语句;BATCH:可以重复执行语句和批处理语句 -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!-- 设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时,格式为正整数 -->
        <setting name="defaultStatementTimeout" value="5000"/>
        <!-- 指定log4j日志实现 -->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    
     <plugins>
         <!-- PageHelper4.1.1 --> 
        <plugin interceptor="com.github.pagehelper.PageHelper">

            <property name="dialect" value="mysql"/>

            <property name="offsetAsPageNum" value="false"/>

            <property name="rowBoundsWithCount" value="false"/>

            <property name="pageSizeZero" value="true"/>

            <property name="reasonable" value="true"/>

            <property name="supportMethodsArguments" value="false"/>

            <property name="returnPageInfo" value="none"/>

        </plugin>
    </plugins>  
    

</configuration>
View Code

 

    4.log4j.properties  (日志配置文件)

#log4j.rootLogger=DEBUG,A1,R
log4j.rootLogger=INFO,A1,R

# ConsoleAppender 输出
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

# File 输出 一天一个文件,输出路径可以定制,一般在根路径下
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:/log/api/log.txt
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n


#log4j.logger.org.springframework=OFF  
#log4j.logger.org.apache.struts2=OFF  
#log4j.logger.com.opensymphony.xwork2=OFF  
#log4j.logger.com.ibatis=OFF  
#log4j.logger.org.hibernate=OFF


#3 druid
log4j.logger.druid.sql=INFO
log4j.logger.druid.sql.DataSource=info
log4j.logger.druid.sql.Connection=info
log4j.logger.druid.sql.Statement=info
log4j.logger.druid.sql.ResultSet=info
 
#4 mybatis 显示SQL语句部分
log4j.logger.org.mybatis=INFO
#log4j.logger.cn.tibet.cas.dao=DEBUG
#log4j.logger.org.mybatis.common.jdbc.SimpleDataSource=DEBUG#
#log4j.logger.org.mybatis.common.jdbc.ScriptRunner=DEBUG#
#log4j.logger.org.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG#
#log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql=INFO
log4j.logger.java.sql.Statement=INFO
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.java.sql.PreparedStatement=INFO
View Code

 

    5.jdbc.properties (属性配置文件)

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.200:3306/web?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
View Code

    以上配置文件需放在resource目录下

第四步:配置web.xml

<!-- Spring启动监听 -->
  <listener>
    <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>
  
  <!-- spring MVC -->
  <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <!-- UTF-8编码过滤 -->
  <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>


 配置文件中的路径根据实际情况修改

 

另外,如下图:

这条配置是让spring自动扫描mybatis的mapper.xml文件,位置是resource目录下的mybatis文件夹中。所以这个需要自己创建一个mybatis文件夹,

然后将一个空的mapper文件放进去,否则项目会报错。目录结构如下图:

 然后在提供一个空的mapper文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qthh.flyl.app.test.mapper.TestMapper">

    
</mapper>
View Code

 

 

posted @ 2017-03-06 21:32  晴天很嗨  阅读(618)  评论(0编辑  收藏  举报