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、案例截图