SSM框架整合步骤思路及案例分析

10 篇文章 0 订阅
7 篇文章 0 订阅

在这里插入图片描述

SSM框架整合

SSM框架整合就是分别实现Spring与SpringMVC、Spring与Mybatis的整合,而实现整合的主要工作就是把SpringMVC、Mybatis中的对象配置到Spring容器中,交给Spring来管理。

搭建步骤:
1、 新建项目并导入jar文件
整体结构:
java、resources文件夹创建更新(若没有),java中新建文件包后,再并列新建包:
实体类entity、接口mapper(dao)、服务层service、控制层controller、测试util(反向工程工具或测试类)

2、 web.xml配置:
2.1配置DispatchServlet
Spring MVC是基于servlet的框架,DispatchServlet是整个Spring MVC框架的核心,它负责截获请求并将其分派给相应的处理器处理。
2.2配置解决乱码的过滤器
2.3启动spring容器
引入applicationContext.xml(路径),指定spring配置文件位置并配置ContextLoaderListener

3、配置文件(/resources)
3.1 applicationContext.xml
它是Spring的配置文件:主要配置信息有数据源对象、事务管理,以及Mybatis的配置信息等。
a. 数据源相关配置:使用一类数据源如BasicDataSource, 读取sql四要素 ,
定义SqlSessionFactoryBean
b. 生成Dao(Mapper)接口的实现bean对象MapperScannerConfigurer:
扫描Dao层接口(包), 添加sqlSessionfactroy
c. 扫描业务层(包)如**.service.impl
d. 事务管理 DataSourceTransactionManager
3.2 mybatis.xml配置
a. 别名设置typeAliases
b.分页插件PageInterceptor
c.加载sql映射文件**/RoomMapper.xml
3.3 springmvc.xml
a.添加扫描注解控制器**.controller
b. 注解驱动mvc:annotation-driven/
c. 视图解析器 InternalResourceViewResolver
d. 其他如文件上传设置CommonsMultipartResolver
e.静态资源放行mvc:default-servlet-handler/

4、 反向工程
通过反向工程自动生成mapper接口、mapper.xml和entity实体类。
在service包中新建service接口和实现类。其中service的实现类Impl主要代码:
@Service
@Transactional //事务
public class RoomServiceImpl implements RoomService{
@Autowired //自动注入
private RoomMapper roomMapper;
@Override //查询所有
public List getRooMAll() {
return roomMapper.getRooMAll();
}
@Override //新增插入
public int insert(Room record) {
return roomMapper.insert(record);
}
@Override //根据id删除
public int deleteByPrimaryKey(Integer rid) {
return roomMapper.deleteByPrimaryKey(rid);
}
@Override //根据id选择(修改功能用)
public Room selectByPrimaryKey(Integer rid) {
return roomMapper.selectByPrimaryKey(rid);
}
@Override //修改(提交页面时实现修改数据库)
public int updateByPrimaryKeySelective(Room record) {
return roomMapper.updateByPrimaryKeySelective(record);
}
@Override //分页功能,入参当前页(起始页),每页条数
public PageInfo getRoomByPage(int page, int pageSize) {
//开启分页支持
PageHelper.startPage(page,pageSize);
List list = roomMapper.getRooMAll();
PageInfo pageInfo=new PageInfo(list);
return pageInfo;
}
}

5、控制层controller
@Controller
public class RoomController {
@Autowired
private RoomService roomService;

@RequestMapping("/showRoom") //查询所有
public String getRoom(Model model) throws Exception{
List roomList=roomService.getRooMAll();
model.addAttribute(“roomList”,roomList);
return “index”;
}

@RequestMapping("/showRoom2") //分页实现
public String getRoom2(Integer page, Model model) throws Exception{
//判断没有传页码时给第1页
page=page==null?1:page;
PageInfo pageInfo=roomService.getRoomByPage(page,4);

model.addAttribute(“pageInfo”,pageInfo);
return “index2”;
}
@RequestMapping("/addGrade") //新增添加
public String addRoom(Room record) throws Exception{
int i = roomService.insert(record);
if (i<0){
return “error”;
}else {
return “redirect:showRoom”; //重定向
}
}
@RequestMapping("/delGrade") //删除
public String delRoom(Integer rid) throws Exception{
int i = roomService.deleteByPrimaryKey(rid);
if (i<0){
return “error”;
}else {
return “redirect:showRoom”;
}
}
@RequestMapping("/getGrade") //修改
public String updateRoom(Integer rid,Model model) throws Exception{
Room room = roomService.selectByPrimaryKey(rid);
model.addAttribute(“room”,room);
return “update”; //进入修改页面
}

@RequestMapping("/updateGrade") //修改页面编辑后,提交给数据库完成修改
public String updateRoomById(Room room) throws Exception{
int i = roomService.updateByPrimaryKeySelective(room);
System.out.println((i>0?“修改成功!”:“修改失败!”));
return “redirect:showRoom”; //修改完毕重定向,更新后回到展示所有页面
}
}

6、视图(View)
基于系统安全考虑,前端的jsp页面全部放置在/WEB-INF目录下(或再新建jsp文件夹)
Index.jsp页面参考:
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

<html>
<head>
    <title>班级信息管理</title>
</head>
<body>
<div align="center">
<h2>年级信息表</h2>
<table border="1">
    <tr>
        <td>年级编号</td>
        <td>名称</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${pageInfo.list}" var="r">
        <tr>
            <td>${r.rid}</td>
            <td>${r.rname}</td>
            <td><a href="delGrade?rid=${r.rid}">删除</a>
                <a href="getGrade?rid=${r.rid}">修改</a>
                <a href="showStudentinfo?rid=${r.rid}">查看学生</a>
            </td>

        </tr>
    </c:forEach>
</table>

    <a href="add.jsp">添加年级</a>

<br/>
<br/>
<a href="/showRoom2?page=1">首页</a>
<a href="/showRoom2?page=${pageInfo.prePage==0?1:pageInfo.prePage}">上一页</a>
<a href="/showRoom2?page=${pageInfo.pageNum==pageInfo.pages?pageInfo.pages:pageInfo.nextPage}">下一页</a>
<a href="/showRoom2?page=${pageInfo.pages}">尾页</a>
<br/>
<br/>
请选择页面:
    <input type="button" value="<">

<c:forEach begin="1" var="i" end="${pageInfo.pages}" step="1">
    <a href="/showRoom2?page=${i}">${i}</a>
</c:forEach>

    <input type="button" value=">">

<select onchange="location.href='showRoom2?page='+this.value;">
    <c:forEach begin="1" var="i" end="${pageInfo.pages}" step="1">
        <option <c:if test="${pageInfo.pageNum==i}">selected="selected"</c:if> value="${i}">
            第${i}页
        </option>
    </c:forEach>
</select>
<br/>
<br/>
    当前是第${pageInfo.pageNum}页,共${pageInfo.pages}页。
    每页${pageInfo.pageSize}条,共${pageInfo.total}条记录。
    <br/>
</div>

</body>
</html>

7、案例截图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰少2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值