参考:《传智播客-淘淘商城》
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。SSM的整合一般是开发开始的基础。本篇博客将在上一篇的基础上对聚合工程进行SSM整合,搭建JavaWeb开发的骨架,步骤分为如下:
一、准备数据
1. 准备Mysql数据
2. 使用Mybatis逆向生成pojo和mapper代码。
二、整合mybatis和spring
1. 配置数据源和数据库连接池
2. 配置SqlSessionFactory(mybatis和spring整合包中的)
3. 配置mapper文件的扫描器。
4. 配置事务管理器和切面
三、整合spring和spring-mvc
1. 配置注解驱动
2 .配置一个视图解析器。
3 .包扫描器,@Controller注解
四、配置Web.xml
1. 配置springmvc的前端控制器
2. Spring容器初始化的listener。
五、测试
1. 便携Service和ServiceImp
2. 测试
1. Mysql数据导入
在JavaWeb项目中一般数据库设计在后台设计之前完成,需要明确数据库和数据表,在本博客中使用mysql数据库,项目使用参考项目中的sql脚本,使用SQLyog导入SQL脚本完成数据导入。
数据导入成功后可以在SQLyog中看到当前的表,下一步使用Mybatis逆向生成所有表对应的映射和对象文件。
2. Mybatis逆向工程
项目使用Mybatis逆向生成后端需要使用的pojo对象和mapper映射文件,依托工程ality-manager-pojo实现,其POM文件如下:
ality-manager
priv.zenhobby
1.0-SNAPSHOT
4.0.0
ality-manager-pojo
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
src/main/resources/generatorConfig.xml
true
true
Generate MyBatis Artifacts
generate
org.mybatis.generator
mybatis-generator-core
1.3.2
mysql
mysql-connector-java
5.1.6
runtime
POM文件中配置另一个名为“org.mybatis.generator”的plugin,在
POM配置完成后需要配置generator使用的配置文件,放置在POM中指定的:src/main/resources/generatorConfig.xml,该文件内容如下:
之后直接使用maven命令即可在D:\JavaProjects\alitymanager\alitymanagerpojo\src目录下生成指定的priv.ality.pojo和priv.ality.mapper包,然后把包拷贝到需要用的位置即可完成。
注意:
1. 生成的priv.ality.pojo中的各个类可能会带有多个Group ID,需要检查一下。
2. pojo包下只包含所有的pojo类,但mapper下包含Mapper的Java类和Mapper的XML文件,后者中包含了SQL语句,最好拷贝到能够打包的路径下(比如resoureces文件夹下),否则需要在POM文件中额外映射,本博客将mapper.xml文件拷贝到了“D:\JavaProjects\alitymanager\alitymanagerweb\src\main\resources\mapping”下,并且在Spring-mybatis的配置中指明了路径。
如下是逆向生成的文件:
3. xml使用了追加模式,多次生成会导致*Mapper.xml追加到文件上,在Tomcat启动时失败,所以每次生成都要删除上次生成的产物。
spring和mybatis的整合放在ality-manager-web项目中完成,完成之后的文件如下:
其中spring-mybatis.xml中包含了mybatis和spring的整合配置。依次给出配置文件的代码:
jdbc.properties:
jdbc.driverLocation=D:\\Java\\maven\\localRepository\\mysql\\mysql-connector-java\\5.1.32\\mysql-connector-java-5.1.32.jar
jdbc.driverClasss=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/taotao?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
log4j.properties:
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=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%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][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
spring-mybatis.xml
需要注意mapper需要和配置中的路径保持一致。
Springmvc和Spring的整合也在ality-manager-web中完成,
spring-mvc.xml的代码如下:
text/html;charset=UTF-8
五、配置Web.xml
web.xml位于ality-manager-web工程中,其代码如下:
ality-manager
index.html
index.jsp
contextConfigLocation
classpath:spring-mybatis.xml
log4jConfigLocation
classpath:log4j.properties
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encodingFilter
/*
org.springframework.web.context.ContextLoaderListener
org.springframework.web.util.IntrospectorCleanupListener
ality-manager
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
ality-manager
/
15
如上即完成了SSM框架的整合,下面通过一个查询商品信息的Service测试下框架是否正确。
在ality-manager-web项目中添加priv.ality.controller包,添加一个ItemController类,
其代码如下:
package priv.ality.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.ality.pojo.TbItem;
import priv.ality.service.ItemService;
@Controller
public class ItemController {
@Autowired
private ItemService itemService;
@RequestMapping("/item/{itemId}")
@ResponseBody
private TbItem getItemById(@PathVariable Long itemId) {
TbItem item = itemService.getItemById(itemId);
return item;
}
}
通过注解方式定义了一个"/item/{itemId}"的服务,并使用传入的itemId查询数据库,获取商品信息后返回。
在ality-manager-service项目中添加priv.ality.service包,添加一个ItemService接口,并添加其实现类:
ItemService:
package priv.ality.service;
import priv.ality.pojo.TbItem;
public interface ItemService {
TbItem getItemById(Long itemId);
}
package priv.ality.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import priv.ality.mapper.TbItemMapper;
import priv.ality.pojo.TbItem;
import priv.ality.service.ItemService;
/**
* 商品查询Service
*/
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private TbItemMapper itemMapper;
@Override
public TbItem getItemById(Long itemId) {
return itemMapper.selectByPrimaryKey(itemId);
}
}
3. 配置Tomcat
Idea中的Tomcat在File-Settings-Build , Execution, Deployment选项下的Application Servers中配置(Community Edition下找不到该选项):
然后在Run/Debug 窗口中的Deploy选项卡载入ality-manager-web项目中打包出的war包:
4. 启动测试
启动测试:
在SQLyog中查询当前存在的商品信息:
将itemId作为参数,输入地址http://localhost:8080/item/536563,结果如下:
至此SSM框架已经整合成功。项目地址:Zenhobby/alitymanager