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
最新文章
- CodeIgniter笔记-去掉index.php
- 【原】移动web页面支持弹性滚动的3个方案
- gif工具 - ScreenToGif
- 基于KO+bootstrap+MVC的分页控件
- FL2440驱动添加(4)LED 驱动添加
- Java 8 中的 Streams API 详解
- 简简单单C#爬虫小计
- Android笔记二十七.Service组件入门(一).什么是Service?
- servlet第2讲(上集)
- Android开机启动Activity或者Service方法(转载)
- python中 字符 字典 列表之间的转换
- AtCoder Beginner Contest 053
- day 7-14 数据库完整性约束
- 基于Android 的蓝牙A2DP 功能的实现
- 深入浅出——float
- 003-linux命令-文件和目录、查看文件内容-文本处理
- Flutter基础用法解析
- ubuntu16.04设置电池充电阈值
- VS生成事件执行XCOPY时出现Invalid num of parameters的解决方案
- js、php本周第一天和本周最后一天
热门文章
- [ Tools ] [ MobaXterm ] [ SSH ] [ Linux ] 中文顯示解決
- JAVA代理方式使用示例总结
- npm一点点
- JsonNetResult
- Camera三维动画
- C语言提高 (6) 第六天 文件(续) 链表的操作
- Bonjour/Zeroconf with Arduino
- 修改默认input(file)的样式
- Windows环境下制作Ubuntu的U盘启动工具
- 转[总结]FFMPEG视音频编解码零基础学习方法 .