【学习背景】
最近学习的项目是SSM框架,即Spring、SpringMVC和Mybatis。之前实习的项目底层用的就是mybatis,但那时为了保证团队开发进度,只顾着开发,并且项目框架、所用到的技术都是建立在已有的基础上,而此次框架的整合,是想亲手搭建一次,做出个小demo。所以,这一次的实践既有基础,也有挑战。
【学习过程】
IDEA开发工具用的不是很多,所以自己也是有机会就尝试着用用它。这次搭建用的就是IDEA开发,其中也遇
到了些Eclipse中没有的问题,会在后面写到。
一. 创建Maven项目
这个过程很简单,和Eclipse创建Maven项目基本上是一样的,跟着提示一步步走下去即可。
二. 完善项目结构
除了mybatis和SpringMVC基本的代码结构之外,包含两个配置文件,分别是
spring-mybatis.xml,即spring与mybatis的整合;另一个是spring-mvc.xml,即SpringMVC的配置文件。此外还有两个资源文件,jdbc.properties和log4j.properties,连接数据库和记录日志所用。
三. maven添加包依赖
利用maven进行包管理,就不用再像之前那样,一个个去手动添加需要的jar包,直接在pom文件中引入即可。
pom.xml:
4.0.0
com.ssm
SSM
1.0-SNAPSHOT
war
4.1.3.RELEASE
3.2.8
1.6.4
1.2.17
junit
junit
4.11
test
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-oxm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.2.2
javax
javaee-api
7.0
mysql
mysql-connector-java
5.1.30
commons-dbcp
commons-dbcp
1.2.2
jstl
jstl
1.2
log4j
log4j
${log4j.version}
com.alibaba
fastjson
1.1.41
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.codehaus.jackson
jackson-mapper-asl
1.9.13
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.4
commons-codec
commons-codec
1.9
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
/
UTF-8
最近接触maven项目比较多了,也遇到了一些pom文件报错的问题,主要是依赖的包找不到。这就和maven仓库管理的机制有关系了,一个是本地、一个是私服,这和配置maven的setting文件有关,两个仓库都找不到的话,就需要自己需要下载相关的jar包,然后执行相关命令保存到本地仓库即可。
四. spring与mybatis整合
1. 建立jdbc.properties文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_ssm?characterEncoding=utf-8
username=root
password=111111
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
2. 建立spring-mybatis.xml配置文件,主要配置自动扫描、自动注入和配置数据库:
3. 建立log4j配置,主要是方便调试,用日志输出信息:
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.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 = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
五. junit测试
以上过程我们便完成了spring和mybatis的整合,下面就用单元测试来试试是否成功。
mybatis是可以利用工具生成一套底层代码的,基本的增删改查都可以满足。
具体操作参见博客:【Mybatis】自动生成代码工具
如上图,项目中User、UserMapper.xml、UserMapper都是工具自动生成的,不需要做任何改动。
Service添加根据id查询方法:
package com.ssm.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.ssm.dao.UserMapper;
import com.ssm.pojo.User;
import com.ssm.service.UserService;
@Service
public class UserServiceImpl implements UserService{
@Resource
private UserMapper userMapper;
public User getUserById(int userId) {
return this.userMapper.selectByPrimaryKey(userId);
}
}
package com.ssm.service;
import com.ssm.pojo.User;
public interface UserService {
public User getUserById(int userId);
}
建立测试类:
在src/test/java中建立测试类,TestMybatis代码如下:
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.alibaba.fastjson.JSON;
import com.ssm.pojo.User;
import com.ssm.service.UserService;
@RunWith(SpringJUnit4ClassRunner.class) //表示继承了SpringJUnit4ClassRunner类
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
public class TestMyBatis {
private static Logger logger = Logger.getLogger(TestMyBatis.class);
@Resource
private UserService userService = null;
@Test
public void test1() {
User user = userService.getUserById(1);
System.out.println(user.getUserName());
logger.info("值:"+user.getUserName());
logger.info(JSON.toJSONString(user));
}
}
spring和mybatis整合测试通过结果:
六. Spring与Mybatis整合中遇到的问题
1. 数据库连接不上,原因是jdbc配置的问题。因为配置的那些值,如com.mysql.jdbc.Driver结尾
处多输入了一个空格,其它的配置也有相同的问题。这个问题也是花了不少时间,一直是认为没有问题的,可是死活就是连接不上。最后上网查看大家的解决方案,才发现了这一问题。
2. 配置文件的扫描问题。在spring-mybatis的配置文件中,会有需要扫描spring-mybatis.xml文
件的代码,最初的写法是:
这在Eclipse中没有问题,在IDEA中就有问题了。解决的办法便是在resources文件夹下多建立一个
mapper文件夹,并设置为resources类型,将mapper.xml文件放此处,再修改扫描路径即可解决。
路径修改:
七. SpringMVC整合
配置spring-mvc.xml:
配置web.xml:
Archetype Created Web Application
contextConfigLocation
classpath:spring-mybatis.xml
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
true
encoding
UTF-8
encodingFilter
/*
org.springframework.web.context.ContextLoaderListener
org.springframework.web.util.IntrospectorCleanupListener
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
true
SpringMVC
/
/index.jsp
至此,三大框架就整合完了。下面就继续测试一下,新建一个User.jsp页面,通过controller将查
询到的用户名显示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
SSM框架整合
${user.userName},你好!
建立UserController类:
package com.ssm.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ssm.pojo.User;
import com.ssm.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/QueryUser")
public String toIndex(HttpServletRequest request,Model model){
int userId = Integer.parseInt(request.getParameter("id"));
User user = this.userService.getUserById(userId);
model.addAttribute("user", user);
return "User";
}
}
遇到的问题:
以上代码,在Eclipse中没有任何问题提示,而在idea中便会提示到已经过时,在部署项目的时候
就会报错,所以,也是做了对应的替换。
八. IDEA部署Maven web项目
最简单的方法就是将该项目执行maven命令,打成war包,然后将war包直接拷贝到tomcat的webapps
目录下,便可直接访问。
1. 执行maven install,生成对应的war包
下图中标出的便是war包的路径:
按controller中的配置,输入对应的地址:http://localhost:8080/SSM/user/QueryUser?id=1
查看结果:
至此,三大框架的整合也测试完成了。
【学习感受】
整个搭建过程遇到了很多问题,从开发工具的选择,到项目的一点点整合、测试,到最后的项目部署,各方
面都不是非常顺利的,但这样的过程还是少不了的,平时的积累,实践的经验,才能从一点都不熟悉,到一点点熟
悉。