说明:文章所有内容截选自实验楼教程:【SSM 框架整合实例】~
一、实验介绍
1.1 实验内容
SSM(Spring+Spring MVC+MyBatis)是媲美于 SSH 框架的轻量级 Java EE 框架。本次项目课的场景,假设为开发一个简单的用户基本信息的管理网站,在数据库中存在的每一个用户都可以登录网站,然后在网站上进行用户的管理(增删改查)。主要目的是为了展示如何整合 SSM 框架。
1.2 实验知识点
- Spring 框架
- Spring MVC 框架
- MyBatis 框架
- MySQL
1.3 实验环境
- Tomcat 7
- JDK1.7
- Eclipse JavaEE
- Firefox浏览器
- MySQL 5.5.50
- Xfce终端
1.4 适合人群
本课程难度偏上,属于中高级课程,适合具有Java Web 和框架知识的同学学习,帮助他们更加清晰、透彻地理解和应用框架。
1.5 代码获取
你可以在Xfce终端下通过下面命令将实验的完整工程项目下载到实验楼环境中,作为参照对比进行学习。
wget http://labfile.oss.aliyuncs.com/courses/817/SSMTest.tar
二、实验原理
(1)前置课程
在开始本课程前,请同学们先学习 Spring、Spring MVC、MyBatis 三个框架的基础知识。
- 本次项目课的场景,假设为开发一个简单的用户基本信息的管理网站,在数据库中存在的每一个用户都可以登录网站,然后在网站上进行用户的管理(增删改查)。
(2)SSM 框架分析
在实际项目中,我们采用 SSM 框架进行开发,Spring MVC 用于 Web 层,相当于 Controller,处理请求并作出响应;MyBatis 作为持久层的框架,可以自由的控制 SQL,更加简捷地完成数据库操作;Spring 的依赖注入可以减少代码的耦合,可以装配 Bean,另外其 AOP、事务管理尤其方便,同时,Spring 可以将各层进行整合。
三、项目文件结构
四、开发准备
本次课程 SSM 框架的版本:
- Spring 4.2.0 RELEASE
- Spring MVC 4.2.0 RELEASE
- MyBatis 3.3.0
SSM 框架整合所需的 jar 包已经放在实验楼的服务器中,请打开实验环境桌面上的 Xfce ,输入下面的代码获取:
wget http://labfile.oss.aliyuncs.com/courses/817/ssm-jars.zip
输入下面的命令解压 .zip 文件:
unzip ssm-jars.zip
五、实验步骤
5.1 数据库准备
本次课程使用 MySQL 数据库。首先启动 mysql :
$ sudo service mysql start
然后在终端下输入以下命令,进入到 MySQL 数据库(-u 表示用户名,比如这里的 root,-p 表示密码,这里没有密码就省略了):
$ mysql -u root
为了实验方便,我们在这里新建一个数据库并取名 ssm
用作实验。
create database ssm;
在数据库 ssm
下创建表 user
,代码如下:
use ssm;
mysql> create table user(
-> id int primary key auto_increment,
-> username varchar(20),
-> password varchar(20),
-> sex varchar(10),
-> age int);
我们先往 user 表插入一条测试数据:
insert into user(username,password,sex,age) value('shiyanlou','123456','male',22);
5.2 新建工程项目
首先在 Eclipse 里新建一个 Web 工程(Dynamic Web Project),命名为 SSMTest
。
点击 Next
, 注意勾选 “自动生成 web.xml” 这个选项。
同时,将 /home/shiyanlou/ssm-jars/
路径下的全部 jar 包拷贝到项目的 WebContent/WEB-INF/lib/
目录下。导入的 jar 包包括:
- Spring 框架 jar 包
- MyBatis 框架 jar 包
- MyBatis 整合 Spring 中间件 jar 包
- aspectj 框架 jar 包
- aopalliance.jar
- 数据库驱动 jar 包
- 数据源 c3p0 jar 包
- JSTL 标签库 jar 包
- 单元测试 junit.jar
这些 jar 包在本项目中可能并没有完全用到。
在 /Java Resources/src
下新建各层的包,如图:
- model 下是一系列 POJO,即各种实体类
- mapper 相当于 DAO 层,由于这里采用 MyBatis,所以把它称为 Mapper,其下包括 Mapper 接口和 Mapper 配置文件,通过 SQL 语句的映射完成 CRUD 操作
- service 由一系列业务逻辑对象组成,放置各种 service 接口
- service.impl 是 service 的具体实现
- controller 由一系列控制器组成,处理用户请求并作出响应
5.3 model 层实体类 User
在包 com.shiyanlou.model
下新建类 User.java
, 一个用户具有:id、username、password、sex、age 五个属性,代码如下:
package com.shiyanlou.model;
public class User {
private Integer id; // 用户 id
private String username; // 用户名
private String password; // 密码
private String sex; // 性别
private Integer age; // 年龄
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
// 重写了 toString 方法,方便后面的测试
public String toString() {
return "id:" + id + ",username:" + username + ",password:" + password
+ ",sex:" + sex + ",age:" + age;
}
}
5.4 mapper(dao) 层实现
在包 com.shiyanlou.mapper
下建一个 UserMapper.java
接口文件和 UserMapper.xml
。
UserMapper 接口的代码如下:
package com.shiyanlou.mapper;
import java.util.List;
import com.shiyanlou.model.User;
public interface UserMapper {
/**
* 用户登录查询
* @param user
* @return User
**/
public User selectLogin(User user);
/**
* 查询全部用户
* @return List
**/
public List selectAllUser();
/**
* 新增用户
* @param user
**/
public void addUser(User user);
/**
* 更新用户
* @param user
**/
public void updateUser(User user);
/**
* 删除用户
* @param id
**/
public void deleteUser(Integer id);
}
UserMapper.xml 的配置如下:
insert
into user(username,password,sex,age)
values(#{username},#{password},#{sex},#{age})
update user set
username=#{username},password=#{password},sex=#{sex},age=#{age} where
id=#{id}
delete from user where
id=#{id}
到这里, DAO 层的代码就写完了,接下来我们来实现 Service 层的代码。
注:MyBatis 的配置文件放在整合时在进行处理。
5.5 service 层实现
5.5.1 Service 层接口
在包 com.shiyanlou.service
下建一个 UserService.java
接口文件,添加如下代码:
package com.shiyanlou.service;
import java.util.List;
import com.shiyanlou.model.User;
public interface UserService {
/**
* 用户登录
* @param user
* @return 登录成功返回 User 对象,失败返回 null
**/
User login(User user);
/**
* 查询所有用户
* @return 查询到的所有 User 对象的 list
**/
List selectAllUser();
/**
* 新增用户
* @param user
**/
void addUser(User user);
/**
* 更新用户
* @param user
**/
void updateUser(User user);
/**
* 删除用户
* @param id(用户 id)
**/
void deleteUser(Integer id);
}
5.5.2 Service 层接口实现类
在包 com.shiyanlou.service.impl
下建一个类 UserServiceImpl.java
,用来实现 UserService
接口中的方法,添加如下代码:
package com.shiyanlou.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.shiyanlou.mapper.UserMapper;
import com.shiyanlou.model.User;
import com.shiyanlou.service.UserService;
/**
* 将当前类注释为一个 Spring 的 bean
**/
@Service
@Transactional
public class UserServiceImpl implements UserService{
/**
* 自动注入 UserMapper
**/
@Autowired
public UserMapper userMapper;
// 下面是 UserService 接口所有方法的具体实现
@Override
public User login(User user) {
return userMapper.selectLogin(user);
}
@Override
public List selectAllUser() {
List users = userMapper.selectAllUser();
return users;
}
@Override
public void addUser(User user) {
userMapper.addUser(user);
}
@Override
public void updateUser(User user) {
userMapper.updateUser(user);
}
@Override
public void deleteUser(Integer id) {
userMapper.deleteUser(id);
}
}
到这里, Service 层的代码就写完了,接下来将 Spring 和 MyBatis 进行整合。
由于篇幅有限,关于:
- Spring 和 MyBatis 整合
- Spring、MyBatis 整合测试
- Spring MVC 的整合
- 项目测试
这4项内容,点击【SSM 框架整合实例】即可完整查看了~