spring+springmvc+mybatis+maven入门实战(超详细教程)
入门篇
本篇文章涉及到的技术有spring、springmvc、mybatis、mysql、xml、maven、jsp、javase、javaweb、eclipse
下面开始本篇文章的教程
一、新建maven项目
一般通过这种方法新建maven项目
假如你的eclipse不能通过上面的方法新建maven项目,也可以通过下面的方法新建maven项目
看到下面的项目结构,说明你已经成功创建了一个maven项目。但是这个项目报错,根据标准的web项目结构来说,目前这个项目缺少了web.xml
利用eclipse自动生成web.xml
看到这个项目已经没有报错,说明已经成功生成了web.xml
二、maven配置
下面是该项目的maven配置,在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>com.wffanshao</groupid> <artifactid>test</artifactid> <version>0.0.1-snapshot</version> <packaging>war</packaging> <properties> <!-- spring版本号 --> <spring.version>4.3.6.release</spring.version> </properties> <dependencies> <!-- spring依赖包 --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-aop</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-aspects</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-core</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-expression</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> <!-- springmvc依赖包 --> <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> <!-- mybatis依赖包 --> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.4.2</version> </dependency> <!-- spring、mybatis集成包 --> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>1.3.1</version> </dependency> <!-- aop依赖包 --> <dependency> <groupid>aopalliance</groupid> <artifactid>aopalliance</artifactid> <version>1.0</version> </dependency> <dependency> <groupid>asm</groupid> <artifactid>asm</artifactid> <version>3.3.1</version> </dependency> <dependency> <groupid>org.aspectj</groupid> <artifactid>aspectjweaver</artifactid> <version>1.8.1</version> </dependency> <dependency> <groupid>cglib</groupid> <artifactid>cglib</artifactid> <version>2.2.2</version> </dependency> <!-- mysql驱动包 --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.44</version> </dependency> <!-- 数据库连接池依赖包 --> <dependency> <groupid>commons-dbcp</groupid> <artifactid>commons-dbcp</artifactid> <version>1.4</version> </dependency> <dependency> <groupid>commons-pool</groupid> <artifactid>commons-pool</artifactid> <version>1.6</version> </dependency> <dependency> <groupid>commons-logging</groupid> <artifactid>commons-logging</artifactid> <version>1.1.1</version> </dependency> <!-- jsp标准标签库 --> <dependency> <groupid>javax.servlet</groupid> <artifactid>jstl</artifactid> <version>1.2</version> </dependency> <!-- 日志依赖包 --> <!-- 第一种,不推荐 可以用于学习log4j,正式项目中不推荐使用,这样是依赖具体的log4j日志系统。 --> <!-- <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>1.2.17</version> </dependency> <dependency> <groupid>org.apache.logging.log4j</groupid> <artifactid>log4j-api</artifactid> <version>2.0-rc1</version> </dependency> <dependency> <groupid>org.apache.logging.log4j</groupid> <artifactid>log4j-core</artifactid> <version>2.0-rc1</version> </dependency> --> <!-- 第二种,博主推荐这种 一般创建工程,建议通过slf4j设计日志系统,方便扩展 --> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-api</artifactid> <version>1.7.5</version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version>1.7.5</version> </dependency> <!-- 动态加载依赖包 --> <dependency> <groupid>org.javassist</groupid> <artifactid>javassist</artifactid> <version>3.18.1-ga</version> </dependency> </dependencies> <build> <!-- 指定打包后文件的名字,例如test.war --> <finalname>test</finalname> <plugins> <!-- 指定jdk版本为1.8 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <!-- 配置阿里巴巴maven节点,下载速度比较快 --> <repositories> <repository> <id>people.apache.snapshots</id> <url> http://repository.apache.org/content/groups/snapshots-group/ </url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </project>
三、搭建ssm环境
1.在src/main/java新建4个包、在src/main/resources下新建2个包以及2个properties文件、在webapp/web-inf下新建1个文件夹,包名、文件名以及文件夹名如图所示。
src/main/java:一般用来存放java文件
src/main/resources:一般用来存放ssm相关的配置文件
src/test/java和src/test/resources:一般用来存放测试文件,这两个包下的文件不会被编译、打包等
webapp/web-inf:一般用来存放普通用户访问不到而管理员可以访问的web动态页面
2.配置log4j日志文件
log4j.properties代码如下,有些网友在复制楼主的代码会产生乱码,这是由于eclipse的properties文件默认编码为iso-8859-1
我们需要将编码设置为utf-8
##### global logging configuration ##### 在开发环境下日志级别设置成debug,生产环境设置成info或error log4j.rootlogger=debug, stdout ##### mybatis日志配置 log4j.logger.org.mybatis.example.blogmapper=trace ##### 输出到控制台,这里也可以输出到文件中,可以自己设置 log4j.appender.stdout=org.apache.log4j.consoleappender log4j.appender.stdout.layout=org.apache.log4j.patternlayout log4j.appender.stdout.layout.conversionpattern=%5p [%t] - %m%n
3.配置数据源文件
db.properties代码如下,此处采用非硬编码的方式对数据源进行配置,也就是将数据源相关信息配置到db.properties中,采用非硬编码的好处是方便项目日后的维护以及方便拓展。当然你也可是采用硬编码方式(传统方式)进行配置,也就是直接在spring配置文件中配置。
jdbc.driver=com.mysql.jdbc.driver jdbc.url=jdbc:mysql://localhost:3306/ssm jdbc.username=root jdbc.password=test
4.在mysql中新建ssm数据库,并在ssm数据库中新建一个user表,表的结构如图所示
5.com.wffanshao.po中新建一个po类,名字为user
user.java的代码如下
package com.wffanshao.po; /** * @描述 用户po类 * @author wf帆少 * @微信 13025261795 * */ public class user { private string username; // 用户名 private string password; // 用户密码 public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } }
6.在com.wffanshao.mapper中新建usermapper接口和usermapper.xml
usermapper.java代码如下
package com.wffanshao.mapper; import com.wffanshao.po.user; /** * @描述 用户mapper接口 * @author wf帆少 * @微信 13025261795 * */ public interface usermapper { /** * @描述 添加用户 * @param user * @throws exception */ boolean insertuser(user user) throws exception; }
usermapper.xml代码如下
<?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.wffanshao.mapper.usermapper"> <!-- 添加用户 --> <insert id="insertuser" parametertype="user" > <!-- 使用动态sql,通过if判断,满足条件进行sql拼接 --> <if test="username != null and password != null"> insert into user(username, password) values(#{username}, #{password}) </if> </insert> </mapper>
7.在com.wffanshao.service中新建userservice接口
userservice.java代码如下
package com.wffanshao.service; import com.wffanshao.po.user; /** * @描述 用户service接口 * @author wf帆少 * @微信 13025261795 * */ public interface userservice { /** * @描述 添加用户 * @param user * @throws exception */ boolean insertuser(user user) throws exception; }
8.在com.wffanshao.service.impl中新建userserviceimpl类
userserviceimpl.java代码如下
package com.wffanshao.service.impl; import org.springframework.beans.factory.annotation.autowired; import com.wffanshao.mapper.usermapper; import com.wffanshao.po.user; import com.wffanshao.service.userservice; /** * @描述 用户service接口的实现类 * @author wf帆少 * @微信 13025261795 * */ public class userserviceimpl implements userservice{ @autowired private usermapper usermapper; /** * @描述 添加用户 * @param user * @throws exception */ @override public boolean insertuser(user user) throws exception { return usermapper.insertuser(user); } }
9..在com.wffanshao.controller中新建usercontroller类
usercontroller.java代码如下
package com.wffanshao.controller; import javax.servlet.http.httpservletrequest; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.postmapping; import com.wffanshao.po.user; import com.wffanshao.service.userservice; /** * @描述 用户controller * @author wf帆少 * @微信 13025261795 * */ @controller public class usercontroller { @autowired private userservice userservice; /** * @描述 跳转到login.jsp * @return */ @getmapping("/login") public string login() { return "login"; } /** * @描述 从login.jsp中的表单提交中获取数据并将它们添加到数据库中, * @return 如果添加成功,跳转到success.jsp,否则,跳转到fail.jsp */ @postmapping("/insertuser") public string insertuser(httpservletrequest request) throws exception { user user = new user(); string username = request.getparameter("username"); string password = request.getparameter("password"); user.setusername(username); user.setpassword(password); boolean issuccess = false; issuccess = userservice.insertuser(user); if (issuccess) { return "success"; } else { return "fail"; } } }
10.在webapp/web-inf/jsp下新建login.jsp、success.jsp、fail.jsp
login.jsp
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>注册</title> </head> <body> <form action="${pagecontext.request.contextpath }/insertuser" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"></td> </tr> <tr> <td> <input type="submit" value="注册"> </td> </tr> </table> </form> </body> </html>
success.jsp
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>注册成功</title> </head> <body> <h2>注册成功</h2> </body> </html>
fail.jsp
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>注册失败</title> </head> <body> <h2>注册失败</h2> </body> </html>
11.在src/main/resources/spring中新建4个xml文件
application-dao.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:mvc="http://www.springframework.org/schema/mvc" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 --> <context:property-placeholder location="classpath:db.properties" /> <!-- 配置数据源,dbcp --> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="maxactive" value="30"/> <property name="maxidle" value="5"/> </bean> <!-- sqlsessionfactory --> <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean"> <!-- 数据库连接池 --> <property name="datasource" ref="datasource" /> <!-- 加载mybatis的全局配置文件 --> <property name="configlocation" value="classpath:mybatis/sqlmapconfig.xml" /> </bean> <!-- mapper扫描器 --> <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <!-- 扫描包路径,如果需要扫描多个包,中间用半角逗号隔开--> <property name="basepackage" value="com.wffanshao.mapper"></property> <property name="sqlsessionfactorybeanname" value="sqlsessionfactory"></property> </bean> </beans>
application-service.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:mvc="http://www.springframework.org/schema/mvc" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 用户的service --> <bean id="userservice" class="com.wffanshao.service.impl.userserviceimpl"></bean> </beans>
applicationcontext-transaction.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:mvc="http://www.springframework.org/schema/mvc" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 事务管理器 对mybatis操作数据库的事务控制,spring使用jdbc的事务控制类 --> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <!-- 数据源 datasource在applicationcontext-dao.xml中配置了 --> <property name="datasource" ref="datasource" /> </bean> <!-- 通知 --> <tx:advice id="txadvice" transaction-manager="transactionmanager"> <tx:attributes> <!-- 传播行为 --> <tx:method name="save*" propagation="required"/> <tx:method name="delete*" propagation="required"/> <tx:method name="insert*" propagation="required"/> <tx:method name="update*" propagation="required"/> <tx:method name="find*" propagation="supports" read-only="true"/> <tx:method name="get*" propagation="supports" read-only="true"/> <tx:method name="select*" propagation="supports" read-only="true"/> </tx:attributes> </tx:advice> <!-- aop --> <aop:config> <!-- 配置切入点 --> <aop:advisor advice-ref="txadvice" pointcut="execution(* com.wffanshao.service.impl.*.*(..))"/> </aop:config> </beans>
springmvc.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:mvc="http://www.springframework.org/schema/mvc" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 注解(推荐使用) --> <!-- 可以扫描controller、service.... 这里让扫描controller,指定controller的包 --> <context:component-scan base-package="com.wffanshao.controller"></context:component-scan> <!-- 注解的处理器映射器 --> <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.requestmappinghandlermapping" /> --> <!-- 注解的处理器适配器 --> <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter" /> --> <!-- 使用mvc:annotation-driver代替上边注解映射器和注解适配器配置 mvc:annotation-driver默认加载很多的参数绑定方法, 比如json转换解析器被默认加载了,如果使用mvc:annotation-driver不用配置上边requestmappinghandlermapping,requestmappinghandleradapter 实际开发时使用mvc:annotation-driven conversion-service:自定义参数绑定的注入 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 静态资源解析 包括:js、css、img.... --> <!-- <mvc:resources location="/js/" mapping="/js/**"/> --> <!-- 视图解析器 解析jsp解析,默认使用jstl标签 ,classpath下的有jstl的包 --> <bean class="org.springframework.web.servlet.view.internalresourceviewresolver"> <!-- 配置jsp路径的前缀 --> <property name="prefix" value="/web-inf/jsp/" /> <!-- 配置jsp路径的后缀 --> <property name="suffix" value=".jsp" /> </bean> <!-- 自定义参数绑定 --> <!-- <bean id="conversionservice" class="org.springframework.format.support.formattingconversionservicefactorybean"> 转换器 <property name="converters"> 日期类型转换 <bean class="com.wffanshao.controller.converter.customdateconverter"></bean> </property> </bean> --> <!-- 配置校验器 --> <!-- <bean id="validator" class="org.springframework.validation.beanvalidation.localvalidatorfactorybean"> 校验器,使用hibernate校验器 <property name="providerclass" value="org.hibernate.validator.hibernatevalidator" /> 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下面的validationmessages.properties文件 <property name="validationmessagesource" ref="messagesource" /> </bean> - -> <!-- 校验错误信息配置文件 --> <!-- <bean id="messagesource" class="org.springframework.context.support.reloadableresourcebundlemessagesource"> 资源文件名 <property name="basenames"> <list> <value>classpath:customvalidationmessage</value> </list> </property> 资源文件编码格式 <property name="defaultencoding" value="utf-8" /> 对资源文件内容缓存时间,单位秒 <property name="cacheseconds" value="120" /> </bean> - -> <!-- 全局异常处理器 只要实现handlerexceptionresolver接口就是全局异常处理器 --> <!-- <bean class="com.wffanshao.exception.customexceptionresolver"></bean> --> <!-- 上传文件 --> <!-- <bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver"> 最大文件大小,设置上传文件的最大尺寸为5m,-1为不限制大小, <property name="maxuploadsize" > <value>5242880</value> </property> </bean> --> <!-- 拦截器 --> <!-- <mvc:interceptors> 多个拦截器,顺序执行 <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.wffanshao.interceptor.logininterceptor"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.wffanshao.interceptor.handlerinterceptor1"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.wffanshao.interceptor.handlerinterceptor2"/> </mvc:interceptor> </mvc:interceptors> --> </beans>
四、配置tomcat服务器
注意:博主使用的是tomcat7
这里没有教大家如何下载安装配置tomcat服务器,请大家自行学习,或者等博主后续教程补上。这里只教大家如何用eclipse配置tomcat服务器,需要提前下载解压安装好tomcat才能进行此步操作
配置好tomcat服务器之后,你会发现项目报错了
打开查看报错原因,你会发现该项目是因为无法解析jsp而报错,我们可以通过设置项目属性来解决该问题,即设置该项目的运行环境
设置完成后你会发项目已经不报错了
四、装配项目
将该项目添加到tomcat服务器中
到这里,已经成功将项目装配到tomcat服务器中了。
五、启动tomcat服务器
启动服务器
看到started并且控制台没有报错说明服务器启动成功
六、测试
在浏览器地址栏中http://localhost:8080/test/login,tomcat服务器默认端口为8080
接着输入用户名和密码,然后点击注册
注册成功会跳转到成功页面,并且在数据库中能查询到我们刚才输入的用户名和密码,
看到下面2张图所示的内容,证明ssm环境整合成功
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。