Fork me on GitHub
Maven + SpringMVC + Mybatis

使用IDEA配置Maven + SpringMVC + Mybatis 【一步一步踩坑详细配置完成】

PS:初学,想使用Maven配置一个SpringMVC的开发环境,照着网上的各种图文解说,配置了好久都没成功,有些写的不够详细,有些只有写一半,走了不少弯弯绕绕,踩了不少的坑,此文将正确配置成功的步骤全部记录下来。

1、环境

IDEA 2017.3
Maven 使用了 IDEA自带Maven,亦可以不用自带的(没什么大区别),不用IDEA自带的可以先去下载maven安装并设置。
   Maven 安装配置 http://www.cnblogs.com/yangdaxian/p/8676373.html

JDK 1.8     JDK需要先下载安装配置好
Spring
Mybatis
MySQL 5.1.41  MySQL需要保证可用
Tomcat 8
2、SSM整合

新建数据库表

复制代码
CREATE TABLE user (
id varchar(10) NOT NULL,
name varchar(20) DEFAULT NULL,
sex varchar(5) DEFAULT NULL,
age varchar(3) DEFAULT NULL,
address varchar(100) DEFAULT NULL,
phone varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO mytest.user(id, name, sex, age, address, phone) VALUES('1', '张三', '男', '18', '共住地球村', '18888888881');
INSERT INTO mytest.user(id, name, sex, age, address, phone) VALUES('2', '李四', '男', '16', '共住地球村', '18888888882');
INSERT INTO mytest.user(id, name, sex, age, address, phone) VALUES('3', '洪五', '女', '22', '共住地球村', '18888888883');
INSERT INTO mytest.user(id, name, sex, age, address, phone) VALUES('4', '马六', '女', '17', '共住地球村', '18888888884');
INSERT INTO mytest.user(id, name, sex, age, address, phone) VALUES('5', '孙七', '女', '23', '共住地球村', '18888888885');
INSERT INTO mytest.user(id, name, sex, age, address, phone) VALUES('6', '赵八', '男', '38', '共住地球村', '18888888886');
复制代码

新建maven项目

选择好自己的JDK路径

设置项目的group id, artifactid, version等信息

设置maven仓库路径,我这边偷懒直接使用了idea自带的

项目名设置,然后Finish

等待后生成结构如下,右下角选择 Enable Auto-import 自动导入;

如果没有自动导入这个选项,pom.xml配置完成后可以在右侧边缘找到 Maven Projects 打开后点击第一个类似刷新的按钮进行下载

新建结构目录如下(若想要包分层结构显示在,上面齿轮那的第二行菜单,【Hide Empty Middle Packages】,将以选中的勾去掉就行)
新建的 java 文件 需要对它转一下, java文件夹上 右击 --> Make Diretorys as --> Sources Root (蓝色) /Test Sources Root (绿色)

【pom.xml 配置】

中添加如下信息
复制代码
    
    
    ... 默认信息
    

org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <!-- 设置JDK版本 -->
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
</plugins>

<finalName>springmvc</finalName>

<!--若不配置,可能会发送打包不全-->
<resources>
  <resource>
    <!--需要打包的目录-->
    <directory>src/main/java</directory>
    <!--目录中的文件类型-->
    <includes>
      <include>**/*.xml</include>
      <include>**/*.properties</include>
    </includes>
  </resource>
  <resource>
    <!--需要打包的目录-->
    <directory>src/main/resources</directory>
    <!--目录中的文件类型-->
    <includes>
      <include>**/*.xml</include>
      <include>**/*.properties</include>
    </includes>
  </resource>
</resources>

复制代码
之前设置变量参数
复制代码

UTF-8 UTF-8 4.3.5.RELEASE 3.4.1 1.2.17 复制代码 在 内添加需要的依赖包 复制代码 javax javaee-api 7.0
<!-- 单元测试 -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
</dependency>

<!-- 实现slf4j接口并整合 -->
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.2</version>
</dependency>

<!-- JSON -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.8.7</version>
</dependency>


<!-- 数据库 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.41</version>
  <scope>runtime</scope>
</dependency>

<!-- 数据库连接池 -->
<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.2</version>
</dependency>

<!-- MyBatis -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>${mybatis.version}</version>
</dependency>

<!-- mybatis/spring整合包 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.3.1</version>
</dependency>

<!--添加Hibernate Validator依赖,不加此项会报错,但不影响项目运行-->
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>5.2.4.Final</version>
</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-jdbc</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-webmvc</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>${spring.version}</version>
</dependency>

<!-- log4j日志 -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>${log4j.version}</version>
</dependency>
复制代码 【pom.xml 配置】 最终配置 复制代码 1 2 20 21 22 23 4.0.0 24 war 25 26 springmvc 27 com.yq 28 springmvc 29 1.0-SNAPSHOT 30 31 32 33 34 org.mortbay.jetty 35 maven-jetty-plugin 36 6.1.7 37 38 39 40 8888 41 30000 42 43 44 ${project.build.directory}/${pom.artifactId}-${pom.version} 45 / 46 47 48 49 50 51 org.mybatis.generator 52 mybatis-generator-maven-plugin 53 1.3.2 54 55 56 57 org.apache.maven.plugins 58 maven-compiler-plugin 59 60 61 1.8 62 1.8 63 64 65 66 67 springmvc 68 69 70 71 72 73 src/main/java 74 75 76 **/*.xml 77 **/*.properties 78 79 80 81 82 src/main/resources 83 84 85 **/*.xml 86 **/*.properties 87 88 89 90 91 92 93 94 95 UTF-8 96 UTF-8 97 98 4.3.5.RELEASE 99 100 3.4.1 101 102 1.2.17 103 104 105 106 107 108 javax 109 javaee-api 110 7.0 111 112 113 114 115 junit 116 junit 117 4.12 118 119 120 121 122 ch.qos.logback 123 logback-classic 124 1.2.2 125 126 127 128 129 com.fasterxml.jackson.core 130 jackson-databind 131 2.8.7 132 133 134 135 136 137 mysql 138 mysql-connector-java 139 5.1.41 140 runtime 141 142 143 144 145 com.mchange 146 c3p0 147 0.9.5.2 148 149 150 151 152 org.mybatis 153 mybatis 154 ${mybatis.version} 155 156 157 158 159 org.mybatis 160 mybatis-spring 161 1.3.1 162 163 164 165 166 org.hibernate 167 hibernate-validator 168 5.2.4.Final 169 170 171 172 173 org.springframework 174 spring-core 175 ${spring.version} 176 177 178 org.springframework 179 spring-beans 180 ${spring.version} 181 182 183 org.springframework 184 spring-context 185 ${spring.version} 186 187 188 org.springframework 189 spring-jdbc 190 ${spring.version} 191 192 193 org.springframework 194 spring-tx 195 ${spring.version} 196 197 198 org.springframework 199 spring-web 200 ${spring.version} 201 202 203 org.springframework 204 spring-webmvc 205 ${spring.version} 206 207 208 org.springframework 209 spring-test 210 ${spring.version} 211 212 213 214 215 log4j 216 log4j 217 ${log4j.version} 218 219 220 221 复制代码

配置 log4j.properties

在resources下新建,根据实际路径更改输出日志路径(D:/WorkSpace/idea_workSpase/springmvc/src/main/webapp/WEB-INF/log/log.txt)
复制代码

日志输出级别

log4j.rootLogger=debug,stdout,D,E

设置stdout的日志输出控制台

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

输出日志到控制台的方式,默认为System.out

log4j.appender.stdout.Target = System.out

设置使用灵活布局

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

灵活定义输出格式

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p] method:[%c (%rms)] - %m%n

每天产生一个日志文件

log4j.appender.D=org.apache.log4j.DailyRollingFileAppender

设置的输出日志

log4j.appender.D.File=D:/WorkSpace/idea_workSpase/springmvc/src/main/webapp/WEB-INF/log/log.txt

设置的日志最大限制

log4j.appender.D.MaxFileSize=6000KB

最多只保存20个备份文件

log4j.appender.D.MaxBackupIndex=20

输出INFO级别以上的日志

og4j.appender.D.Threshold=debug
log4j.appender.D.Append = true
log4j.appender.D.ImmediateFlush = true

log4j.appender.D.DatePattern ='.'yyyy-MM-dd

设置使用灵活布局

log4j.appender.D.layout=org.apache.log4j.PatternLayout

灵活定义输出格式

log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p] method:[%l (%rms)] - %m%n

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D:/WorkSpace/idea_workSpase/springmvc/src/main/webapp/WEB-INF/log/error/error.txt
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR

log4j.appender.E.DatePattern = '_'yyyyMMdd'.log'

log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} -[%p] method:[%l (%rms)] - %m%n
复制代码

配置 jdbc.properties

在resources下新建;需要更改本地驱动路径与数据库连接信息
jdbc.driverLocation=C:\Users\yq\.m2\repository\mysql\mysql-connector-java\5.1.41\mysql-connector-java-5.1.41.jar
jdbc.driverClasss=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.56.107:3306/mytest?useUnicode=true&characterEncoding=UTF-8

声明使用username可能会与系统jvm冲突

jdbc.username=demo
jdbc.password=demo
驱动包路径查看方式:找到对应驱动后 右击 --> copy path

配置generatorConfig.xml

mybatis逆向工程配置文件generatorConfig.xml,此配置文件名称不要改变
复制代码

<!--指定特定数据库的jdbc驱动jar包的位置-->
<classPathEntry location="${jdbc.driverLocation}"/>

<context id="default" targetRuntime="MyBatis3">

    <!-- optional,旨在创建class时,对注释进行控制 -->
    <commentGenerator>
        <property name="suppressDate" value="true"/>
        <property name="suppressAllComments" value="true"/>
    </commentGenerator>

    <!--jdbc的数据库连接 -->
    <jdbcConnection
            driverClass="${jdbc.driverClasss}"
            connectionURL="${jdbc.url}"
            userId="${jdbc.username}"
            password="${jdbc.password}">
    </jdbcConnection>


    <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
    <javaTypeResolver>
        <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>


    <!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
        targetPackage     指定生成的model生成所在的包名
        targetProject     指定在该项目下所在的路径
    -->
    <javaModelGenerator targetPackage="com.yq.model"
                        targetProject="src/main/java">

        <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
        <property name="enableSubPackages" value="false"/>
        <!-- 是否对model添加 构造函数 -->
        <property name="constructorBased" value="true"/>
        <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
        <property name="trimStrings" value="true"/>
        <!-- 建立的Model对象是否 不可改变,即生成的Model对象不会有 getter/setter方法,只有构造方法 -->
        <property name="immutable" value="false"/>
    </javaModelGenerator>

    <!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
    <sqlMapGenerator targetPackage="com.yq.dao"
                     targetProject="src/main/java">
        <property name="enableSubPackages" value="false"/>
    </sqlMapGenerator>

    <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
            type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
            type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
            type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
    -->
    <javaClientGenerator targetPackage="com.yq.dao"
                         targetProject="src/main/java" type="XMLMAPPER">
        <property name="enableSubPackages" value="true"/>
    </javaClientGenerator>

    <!-- 配置需要生成model的数据库表,此项<table> 必须存在,没有需要生成的表的话直接设置为""即可-->
    <table tableName="user"></table>
</context>
复制代码 在这边你可能遭遇 (没遇到请跳过) http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd 识别不到的问题,可进行如下操作,File --> Setting 添加未识别的项

配置完成后的目录结构如下

测试逆向生成是否成功

配置完成后,可以测试逆向生成是否配置成功了~

点击左上角绿色的 + ,设置好 Name(自定义) 与 Command line

选中刚才设置的,点击执行,如果正确配置了能看到在 dao 与 model中均生成了如下文件,这个User表是在generatorConfig.xml中配置的;如果出现错误了,排查下配置文件

配置spring-mybatis

复制代码

<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="com.yq.service"/>

<!-- 配置数据库相关参数properties的属性:${url} -->
<context:property-placeholder location="classpath*:jdbc.properties"/>

<!-- 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driverClasss}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 注入数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 扫描model包 使用别名 -->
    <property name="mapperLocations" value="classpath:com/yq/dao/*.xml" />
</bean>

<!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 给出需要扫描Dao接口包 -->
    <property name="basePackage" value="com.yq.dao"/>
    <!-- 注入sqlSessionFactory -->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 注入数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
</bean>

<!-- 配置基于注解的声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
复制代码

配置spring-mvc

复制代码

<!-- 扫描web相关的bean -->
<context:component-scan base-package="com.yq.controller"/>

<!-- 开启SpringMVC注解模式 -->
<mvc:annotation-driven/>

<!-- 静态资源默认servlet配置 -->
<mvc:default-servlet-handler/>

<!-- 配置jsp 显示ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
复制代码

配置web.xml

复制代码

springmvc
springmvc_0.0.1

encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /* log4jConfigLocation classpath:log4j.properties log4jRefreshInterval 60000 org.springframework.web.util.Log4jConfigListener SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring-*.xml 1 true SpringMVC / index.jsp 复制代码

测试查询数据库是否成功

在test --> dao 目录下新建一个测试类,测试下现在能否读取到数据库内容

复制代码
package com.yq.dao;

import com.yq.model.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-mybatis.xml"})
public class UserQueryTest {

@Autowired
private UserMapper userMapper;

@Test
public void queryUserName() {
    String id = "1";
    User user = userMapper.selectByPrimaryKey(id);
    System.out.println(user.getName());
}

}
复制代码

webapp文件下创建index.jsp文件

复制代码
<%--
Created by IntelliJ IDEA.
User: yq
Date: 2018/3/29
Time: 14:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

测试标题 Hello World! 你的配置是正确哒!!!~~~ 复制代码

配置Tomcat

配置完成 ,启动看看~~

从数据库取数据来展示

现在上面已经配置成功了,接下去就要试试从数据库取数据来展示了
创建UserService
复制代码
package com.yq.service;

import com.yq.dao.UserMapper;
import com.yq.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
@Autowired
private UserMapper userMapper;

public User getUserById(String id){
    return userMapper.selectByPrimaryKey(id);
}

}
复制代码
创建UserController
复制代码
package com.yq.controller;

import com.yq.model.User;
import com.yq.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/userInfo")
public class UserController {
@Autowired
private UserService userService;

@RequestMapping("/getUser")
public ModelAndView getUser(String id){
    ModelAndView modelAndView = new ModelAndView();
    User user = userService.getUserById(id);
    modelAndView.addObject("userInfo",user);
    modelAndView.setViewName("userInfo/getUser");
    return modelAndView;
}

}
复制代码
创建jsp文件,我们在spring-mvc.xml中配置了目录

因此我们要在 WEB-INF下新建个jsp文件夹

getUser.jsp
复制代码
<%--
Created by IntelliJ IDEA.
User: yq
Date: 2018/4/2
Time: 14:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

测试getUser

编号: ${userInfo.id}

姓名:${userInfo.name}

复制代码 访问 http://localhost:8080/springmvc/userInfo/getUser?id=2

https://www.cnblogs.com/caichaoqi/p/8662614.html

完成,没毛病; 配置期间如果由于环境问题会出现一些异常错误,一般拷贝错误度娘下都能解决掉,都不是什么大问题。共勉~

项目下载地址:https://download.csdn.net/download/yq_111111/10322545

posted on 2018-04-09 19:42  HackerVirus  阅读(254)  评论(0)    收藏  举报