使用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

最新文章

  1. CodeIgniter笔记-去掉index.php
  2. 【原】移动web页面支持弹性滚动的3个方案
  3. gif工具 - ScreenToGif
  4. 基于KO+bootstrap+MVC的分页控件
  5. FL2440驱动添加(4)LED 驱动添加
  6. Java 8 中的 Streams API 详解
  7. 简简单单C#爬虫小计
  8. Android笔记二十七.Service组件入门(一).什么是Service?
  9. servlet第2讲(上集)
  10. Android开机启动Activity或者Service方法(转载)
  11. python中 字符 字典 列表之间的转换
  12. AtCoder Beginner Contest 053
  13. day 7-14 数据库完整性约束
  14. 基于Android 的蓝牙A2DP 功能的实现
  15. 深入浅出——float
  16. 003-linux命令-文件和目录、查看文件内容-文本处理
  17. Flutter基础用法解析
  18. ubuntu16.04设置电池充电阈值
  19. VS生成事件执行XCOPY时出现Invalid num of parameters的解决方案
  20. js、php本周第一天和本周最后一天

热门文章

  1. [ Tools ] [ MobaXterm ] [ SSH ] [ Linux ] 中文顯示解決
  2. JAVA代理方式使用示例总结
  3. npm一点点
  4. JsonNetResult
  5. Camera三维动画
  6. C语言提高 (6) 第六天 文件(续) 链表的操作
  7. Bonjour/Zeroconf with Arduino
  8. 修改默认input(file)的样式
  9. Windows环境下制作Ubuntu的U盘启动工具
  10. 转[总结]FFMPEG视音频编解码零基础学习方法 .