基于Maven + SSM (Spring、SpringMVC、Mybatis)构建一个简单的

  最近在公司实习期间的培训交流中有机会接触到SSM,然后自己花费1周的时间投入学习。谈不上深刻理解其中原理,所以没有涉及理论知识,只是浅层次的学习如何使用,在此将学习过程记录整理出来,一方面自己备用;另一方面,分享出来和做技术的各位讨论交流。

  现阶段的我还做不到知行合一,所以决定先学会用,然后再去深究原理。若有不足以及错误之处,望多多包涵、指教,谢谢。

  废话不多说,直接开干!


1、开发环境搭建

推荐博客地址:

MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

2、Maven Web 项目创建

推荐博客地址:

使用maven创建web项目


3、SSM整合

下面主要介绍三大框架的整合,至于环境的搭建以及项目的创建,参看上面的推荐博文。

这次整合分了2个配置文件,一个是spring-mybatis.xml,包含spring和mybatis的配置文件;还有一个是spring-mvc的配置文件。

此外有2个资源文件:jdbc.propertis和log4j.properties。

完整目录结构如下(最后附上源码下载地址,但不建议直接使用源码,因为本文已经贴出全部代码):

使用的框架:

Spring4.0.2RELEASE

SpringMVC4.0.2RELEASE

MyBatis3.2.6


4、Maven引入需要的JAR包

  这里直接给出所有需要的JAR包,都是基本的JAR包,每个包是干什么的都有注释,就不再多说了。请看配置文件。

pom.xml

  1 <properties>  2         <!-- spring版本号 -->  3         <spring.version>4.0.2.RELEASE</spring.version>  4         <!-- mybatis版本号 -->  5         <mybatis.version>3.2.6</mybatis.version>  6         <!-- log4j日志文件管理包版本 -->  7         <slf4j.version>1.7.7</slf4j.version>  8         <log4j.version>1.2.17</log4j.version>  9     </properties> 10  11     <dependencies> 12         <dependency> 13             <groupId>junit</groupId> 14             <artifactId>junit</artifactId> 15             <version>4.11</version> 16             <!-- 表示开发的时候引入,发布的时候不会加载此包 --> 17             <scope>test</scope> 18         </dependency> 19         <!-- spring核心包 --> 20         <dependency> 21             <groupId>org.springframework</groupId> 22             <artifactId>spring-core</artifactId> 23             <version>${spring.version}</version> 24         </dependency> 25  26         <dependency> 27             <groupId>org.springframework</groupId> 28             <artifactId>spring-web</artifactId> 29             <version>${spring.version}</version> 30         </dependency> 31         <dependency> 32             <groupId>org.springframework</groupId> 33             <artifactId>spring-oxm</artifactId> 34             <version>${spring.version}</version> 35         </dependency> 36         <dependency> 37             <groupId>org.springframework</groupId> 38             <artifactId>spring-tx</artifactId> 39             <version>${spring.version}</version> 40         </dependency> 41  42         <dependency> 43             <groupId>org.springframework</groupId> 44             <artifactId>spring-jdbc</artifactId> 45             <version>${spring.version}</version> 46         </dependency> 47  48         <dependency> 49             <groupId>org.springframework</groupId> 50             <artifactId>spring-webmvc</artifactId> 51             <version>${spring.version}</version> 52         </dependency> 53         <dependency> 54             <groupId>org.springframework</groupId> 55             <artifactId>spring-aop</artifactId> 56             <version>${spring.version}</version> 57         </dependency> 58  59         <dependency> 60             <groupId>org.springframework</groupId> 61             <artifactId>spring-context-support</artifactId> 62             <version>${spring.version}</version> 63         </dependency> 64  65         <dependency> 66             <groupId>org.springframework</groupId> 67             <artifactId>spring-test</artifactId> 68             <version>${spring.version}</version> 69         </dependency> 70         <!-- mybatis核心包 --> 71         <dependency> 72             <groupId>org.mybatis</groupId> 73             <artifactId>mybatis</artifactId> 74             <version>${mybatis.version}</version> 75         </dependency> 76         <!-- mybatis/spring包 --> 77         <dependency> 78             <groupId>org.mybatis</groupId> 79             <artifactId>mybatis-spring</artifactId> 80             <version>1.2.2</version> 81         </dependency> 82         <!-- 导入java ee jar 包 --> 83         <dependency> 84             <groupId>javax</groupId> 85             <artifactId>javaee-api</artifactId> 86             <version>7.0</version> 87         </dependency> 88         <!-- 导入Mysql数据库链接jar包 --> 89         <dependency> 90             <groupId>mysql</groupId> 91             <artifactId>mysql-connector-java</artifactId> 92             <version>5.1.30</version> 93         </dependency> 94         <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 --> 95         <dependency> 96             <groupId>commons-dbcp</groupId> 97             <artifactId>commons-dbcp</artifactId> 98             <version>1.2.2</version> 99         </dependency>100         <!-- JSTL标签类 -->101         <dependency>102             <groupId>jstl</groupId>103             <artifactId>jstl</artifactId>104             <version>1.2</version>105         </dependency>106         <!-- 日志文件管理包 -->107         <!-- log start -->108         <dependency>109             <groupId>log4j</groupId>110             <artifactId>log4j</artifactId>111             <version>${log4j.version}</version>112         </dependency>113 114 115         <!-- 格式化对象,方便输出日志 -->116         <dependency>117             <groupId>com.alibaba</groupId>118             <artifactId>fastjson</artifactId>119             <version>1.1.41</version>120         </dependency>121 122 123         <dependency>124             <groupId>org.slf4j</groupId>125             <artifactId>slf4j-api</artifactId>126             <version>${slf4j.version}</version>127         </dependency>128 129         <dependency>130             <groupId>org.slf4j</groupId>131             <artifactId>slf4j-log4j12</artifactId>132             <version>${slf4j.version}</version>133         </dependency>134         <!-- log end -->135         <!-- 映入JSON -->136         <dependency>137             <groupId>org.codehaus.jackson</groupId>138             <artifactId>jackson-mapper-asl</artifactId>139             <version>1.9.13</version>140         </dependency>141         <!-- 上传组件包 -->142         <dependency>143             <groupId>commons-fileupload</groupId>144             <artifactId>commons-fileupload</artifactId>145             <version>1.3.1</version>146         </dependency>147         <dependency>148             <groupId>commons-io</groupId>149             <artifactId>commons-io</artifactId>150             <version>2.4</version>151         </dependency>152         <dependency>153             <groupId>commons-codec</groupId>154             <artifactId>commons-codec</artifactId>155             <version>1.9</version>156         </dependency>157 158 159     </dependencies>

5、Spring与MyBatis整合

首先进行Spring与MyBatis的整合,然后再进行JUnit测试。

5.1 建立JDBC属性文件

jdbc.properties(文件编码修改为utf-8)

 1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/mybatis 3 username=dev 4 password=devlop 5 #定义初始连接数 6 initialSize=0 7 #定义最大连接数 8 maxActive=20 9 #定义最大空闲10 maxIdle=2011 #定义最小空闲12 minIdle=113 #定义最长等待时间14 maxWait=60000

需要自行修改的地方:

url里面mybatis改为自己的数据库名username和password改为自己mysql数据库的用户名和密码

5.2 建立spring-mybatis.xml配置文件

这个文件就是用来完成spring和mybatis整合的。里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库。注释也很详细,大家看看就明白了。

spring-mybatis.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4     xmlns:context="http://www.springframework.org/schema/context" 5     xmlns:mvc="http://www.springframework.org/schema/mvc" 6     xsi:schemaLocation="http://www.springframework.org/schema/beans   7     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd   8     http://www.springframework.org/schema/context   9     http://www.springframework.org/schema/context/spring-context-3.1.xsd  10     http://www.springframework.org/schema/mvc  11     http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">12     <!-- 自动扫描 -->13     <context:component-scan base-package="com.wlgg" />14     <!-- 引入配置文件 -->15     <bean id="propertyConfigurer"16         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">17         <property name="location" value="classpath:jdbc.properties" />18     </bean>19 20     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"21         destroy-method="close">22         <property name="driverClassName" value="${driver}" />23         <property name="url" value="${url}" />24         <property name="username" value="${username}" />25         <property name="password" value="${password}" />26         <!-- 初始化连接大小 -->27         <property name="initialSize" value="${initialSize}"></property>28         <!-- 连接池最大数量 -->29         <property name="maxActive" value="${maxActive}"></property>30         <!-- 连接池最大空闲 -->31         <property name="maxIdle" value="${maxIdle}"></property>32         <!-- 连接池最小空闲 -->33         <property name="minIdle" value="${minIdle}"></property>34         <!-- 获取连接最大等待时间 -->35         <property name="maxWait" value="${maxWait}"></property>36     </bean>37 38     <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->39     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">40         <property name="dataSource" ref="dataSource" />41         <!-- 自动扫描mapping.xml文件 -->42         <property name="mapperLocations" value="classpath:com/wlgg/mapping/*.xml"></property>43     </bean>44 45     <!-- DAO接口所在包名,Spring会自动查找其下的类 -->46     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">47         <property name="basePackage" value="com.wlgg.dao" />48         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>49     </bean>50 51     <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->52     <bean id="transactionManager"53         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">54         <property name="dataSource" ref="dataSource" />55     </bean>56 57 </beans>

5.3 Log4j的配置

  为了方便调试,一般都会使用日志来输出信息。

  Log4j的配置很简单,而且也是通用的,下面给出一个基本的配置,换到其他项目中也无需做多大的调整。

log4j.properties

#定义LOG输出级别log4j.rootLogger=INFO,Console,File#定义日志输出目的地为控制台log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Target=System.out#可以灵活地指定日志输出格式,下面一行是指定具体的格式log4j.appender.Console.layout = org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=[%c] - %m%n#文件大小到达指定尺寸的时候产生一个新的文件log4j.appender.File = org.apache.log4j.RollingFileAppender#指定输出目录log4j.appender.File.File = logs/ssm.log#定义文件最大大小log4j.appender.File.MaxFileSize = 10MB# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志log4j.appender.File.Threshold = ALLlog4j.appender.File.layout = org.apache.log4j.PatternLayoutlog4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

5.4 JUnit测试

  经过以上步骤,已经完成了Spring和Mybatis的整合,这样我们就可以编写一段测试代码来试试是否成功了。

(1)创建测试用表

此时需要在mysql数据库中建立一个测试表,建表的SQL语句如下:

 1 DROP TABLE IF EXISTS `user_t`;   2    3 CREATE TABLE `user_t` (   4   `id` int(11) NOT NULL AUTO_INCREMENT,   5   `user_name` varchar(40) NOT NULL,   6   `password` varchar(255) NOT NULL,   7   `age` int(4) NOT NULL,   8   PRIMARY KEY (`id`)   9 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  10   11 /*Data for the table `user_t` */  12   13 insert  into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'测试','123456',23);  

(2)利用MyBatis Generator自动创建代码

推荐博客地址:

使用MyBatis Generator自动创建代码

使用这种方式可以根据表自动创建实体类、MyBatis映射文件以及DAO接口。

这里建议将生成的接口名改为IUserDao,而不是直接使用它生成的UserMapper。如果不想麻烦也可以不改。完成后将文件复制到工程中。如下图:

(3)建立Service接口和实现类

目录结构:

下面贴出具体代码:

IUserService.java

1 package com.wlgg.service;2 3 import com.wlgg.entity.User;4 5 public interface IUserService {6     public User getUserById(int userId);7 }

UserServiceImpl.java

 1 package com.wlgg.service.impl; 2  3 import javax.annotation.Resource; 4  5 import org.springframework.stereotype.Service; 6  7 import com.wlgg.dao.IUserDao; 8 import com.wlgg.entity.User; 9 import com.wlgg.service.IUserService;10 11 @Service("userService")12 public class UserServiceImpl implements IUserService {13     @Resource14     private IUserDao userDao;15     public User getUserById(int userId) {16         // TODO Auto-generated method stub17         return this.userDao.selectByPrimaryKey(userId);18     }19 20 }

(4)建立测试类

测试类在src/test/java中建立。如果测试成功,表示Spring和Mybatis已经整合成功了。使用Log4j输出信息打印到控制台。

测试代码如下:

 1 import javax.annotation.Resource; 2  3 import org.apache.log4j.Logger; 4 import org.junit.Before; 5 import org.junit.Test; 6 import org.junit.runner.RunWith; 7 import org.springframework.context.ApplicationContext; 8 import org.springframework.context.support.ClassPathXmlApplicationContext; 9 import org.springframework.test.context.ContextConfiguration;10 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;11 12 import com.alibaba.fastjson.JSON;13 import com.wlgg.entity.User;14 import com.wlgg.service.IUserService;15 16 @RunWith(SpringJUnit4ClassRunner.class)        //表示继承了SpringJUnit4ClassRunner类17 @ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})18 19 public class TestMyBatis {20     private static Logger logger = Logger.getLogger(TestMyBatis.class);21 //    private ApplicationContext ac = null;22     @Resource23     private IUserService userService = null;24 25 //    @Before26 //    public void before() {27 //        ac = new ClassPathXmlApplicationContext("applicationContext.xml");28 //        userService = (IUserService) ac.getBean("userService");29 //    }30 31     @Test32     public void test1() {33         User user = userService.getUserById(1);34 //        System.out.println(user.getUserName());35 //        logger.info("值:"+user.getUserName());36         logger.info(JSON.toJSONString(user));37     }38 }

测试结果:

至此,完成Spring和Mybatis这两大框架的整合,下面继续进行与SpringMVC的整合。


6、整合SpringMVC

上面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合。

6.1 配置spring-mvc.xml

配置里面的注释很详细,在此就不说了,主要是自动扫描控制器,视图模式,注解的启动这三个。直接贴出代码如下:

spring-mvc.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4     xmlns:context="http://www.springframework.org/schema/context" 5     xmlns:mvc="http://www.springframework.org/schema/mvc" 6     xsi:schemaLocation="http://www.springframework.org/schema/beans   7     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd   8     http://www.springframework.org/schema/context   9     http://www.springframework.org/schema/context/spring-context-3.1.xsd  10     http://www.springframework.org/schema/mvc  11     http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">12     <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->13     <context:component-scan base-package="com.wlgg.controller" />14     <!--避免IE执行AJAX时,返回JSON出现下载文件 -->15     <bean id="mappingJacksonHttpMessageConverter"16         class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">17         <property name="supportedMediaTypes">18             <list>19                 <value>text/html;charset=UTF-8</value>20             </list>21         </property>22     </bean>23     <!-- 启动SpringMVC的注解功能,完成请求和注解Entity的映射 -->24     <bean25         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">26         <property name="messageConverters">27             <list>28                 <ref bean="mappingJacksonHttpMessageConverter" />    <!-- JSON转换器 -->29             </list>30         </property>31     </bean>32     <!-- 定义跳转的文件的前后缀 ,视图模式配置-->33     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">34         <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->35         <property name="prefix" value="/WEB-INF/jsp/" />36         <property name="suffix" value=".jsp" />37     </bean>38     39     <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->40     <bean id="multipartResolver"  41         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  42         <!-- 默认编码 -->43         <property name="defaultEncoding" value="utf-8" />  44         <!-- 文件大小最大值 -->45         <property name="maxUploadSize" value="10485760000" />  46         <!-- 内存中的最大值 -->47         <property name="maxInMemorySize" value="40960" />  48     </bean> 49 50 </beans>

6.2 配置web.xml

这里面对spring-mybatis.xml的引入以及配置spring-mvc的Servlet就是为了完成SSM整合。之前已完成的2个框架整合不需要在此处进行任何配置。配置一样有详细注释,不多解释了。

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3     xmlns="http://java.sun.com/xml/ns/javaee" 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 5     version="3.0"> 6     <display-name>SSMTest</display-name> 7     <!-- Spring和mybatis的配置文件 --> 8     <context-param> 9         <param-name>contextConfigLocation</param-name>10         <param-value>classpath:spring-mybatis.xml</param-value>11     </context-param>12     <!-- 编码过滤器 -->13     <filter>14         <filter-name>encodingFilter</filter-name>15         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>16         <async-supported>true</async-supported>17         <init-param>18             <param-name>encoding</param-name>19             <param-value>UTF-8</param-value>20         </init-param>21     </filter>22     <filter-mapping>23         <filter-name>encodingFilter</filter-name>24         <url-pattern>/*</url-pattern>25     </filter-mapping>26     <!-- Spring监听器 -->27     <listener>28         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>29     </listener>30     <!-- 防止Spring内存溢出监听器 -->31     <listener>32         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>33     </listener>34 35     <!-- Spring MVC servlet -->36     <servlet>37         <servlet-name>SpringMVC</servlet-name>38         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>39         <init-param>40             <param-name>contextConfigLocation</param-name>41             <param-value>classpath:spring-mvc.xml</param-value>42         </init-param>43         <load-on-startup>1</load-on-startup>44         <async-supported>true</async-supported>45     </servlet>46     <servlet-mapping>47         <servlet-name>SpringMVC</servlet-name>48         <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->49         <url-pattern>/</url-pattern>50     </servlet-mapping>51     <welcome-file-list>52         <welcome-file>/index.jsp</welcome-file>53     </welcome-file-list>54     <!-- 配置SESSION超时,单位是分钟 -->55     <session-config>56         <session-timeout>15</session-timeout>57     </session-config>58 59 </web-app>

6.3 测试

  至此已经完成了SSM三大框架的整合了。来测试一下,如果成功了,那么恭喜你;如果失败了,继续调试吧,作为程序员就是不停地与BUG做斗争!

我是从多次“404”的战场中爬出来的,真的要注意细节!!!

(1)新建jsp页面

showUser.jsp

此页面仅输出一下用户名,完成一个完整的简单测试。

代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head><title>测试</title>  </head>    <body>    ${user.userName}  </body></html>

(2)建立UserController类

UserController.java  控制器

代码如下:

 1 package com.wlgg.controller; 2  3 import javax.annotation.Resource; 4 import javax.servlet.http.HttpServletRequest; 5  6 import org.springframework.stereotype.Controller; 7 import org.springframework.ui.Model; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 10 import com.wlgg.entity.User;11 import com.wlgg.service.IUserService;12 13 @Controller14 @RequestMapping("/user")15 public class UserController {16     @Resource17     private IUserService userService;18     19     @RequestMapping("/showUser")20     public String toIndex(HttpServletRequest request,Model model){21         int userId = Integer.parseInt(request.getParameter("id"));22         User user = this.userService.getUserById(userId);23         model.addAttribute("user", user);24         return "showUser";25     }26 }

(3)部署项目

在浏览器中输入测试地址:localhost:8080/项目名称/user/showUser?id=1

如果得到下图则表示测试成功!

至此,SSM三大框架的整合就顺利完成了,在此基础上可根据具体需要再添加其他功能。

源码下载地址:https://github.com/digfound/SSMTest

(转载请注明出处:http://www.cnblogs.com/JennyZhang-sharing/p/7466086.html)

如果觉得文章还不错或者有用的anyone不妨随手点个赞,谢谢~~~

有的旅行是为了拓宽眼界,浏览风景名胜。

基于Maven + SSM (Spring、SpringMVC、Mybatis)构建一个简单的

相关文章:

你感兴趣的文章:

标签云: