SSM项目添加增删改功能
在昨天的SSM项目基础上添加增删改功能,实现SSM项目的基本功能。
首先看一下昨天实现的查询功能:
进行功能的添加有两个方向,从用户调用角度进行功能的实现,即从调用者到被调用者;第二种,从基础实现角度到具体功能,即从被调用者到调用者。我采用的是第一种方法。
1.添加功能
添加功能的实现过程是,用户录入新增的用户信息,addUser页面将表单数据提交给controller实现新增功能,并且重定向到allUser页面。
1.jsp页面跳转到新增用户界面;
直接在用户信息显示界面jsp中为“新增”功能添加一个界面跳转功能,用户点击“新增”就跳转到新增用户界面;
2.新增用户界面的编写;
本界面主要包含用户信息的输入框,以及确认按钮,以提供用户录入新增用户的信息;
信息提交给controller中的insertUser来处理;
3.完善controller类中insertUser方法;
<@RequestMapping("/insertUser.do")
public String insertUser(UserInfo user){
userService.insertUser(user);
return "redirect:findAll.do";
}>
本方法调用service包中的insertUser方法实现用户信息的插入;
4.在service包下的接口中添加insertUser方法;
public void insertUser(UserInfo userInfo);
5.在service包下的impl包中添加上面接口的实现类;
调用的是dao包中的接口;
@Override
public void insertUser(UserInfo user){ userInfo.insertUser(user);}
6.完善dao包中的接口
public void insertUser(UserInfo userInfo);
7.完善UserMapper中实现插入的功能;
<insert id="insertUser" parameterType="com.zhongruan.bean.UserInfo">
insert into userinfo(username,password) values (#{username},#{password})
</insert>
2.删除功能
删除功能的实现过程是,用户在allUser页面点击“删除”,该页面将要删除的用户id提交给controller实现删除功能,并重定向到allUser页面。
1.实现allUser页面提交要删除的用户id到controller层;
<a href="${pageContext.request.contextPath}/user/delUser.do?id=${userInfo.id}">删除</a>
2.实现controller删除用户的功能;
@RequestMapping("/delUser.do")
public String delUser(int id){
userService.delUser(id);
return "redirect:findAll.do";
}
3.实现service层中接口,实现类,dao层中接口,UserMapper中删除功能;
具体实现原理与过程与添加功能相似;
service接口中的方法:
public void delUser(int id);
service中实现接口的方法:
@Override
public void delUser(int id){ userInfo.delUser(id);}
dao层的接口:
public void delUser(int id);
UserMapper实现删除的方法:
<delete id="delUser" parameterType="int">
delete from userinfo where id = #{id}
</delete>
3.修改功能
修改功能实现过程是,用户点击“更新”,向controlller提交选择用户的id,controller查找对应的用户信息,并返回给更新页面,该页面展示用户原本的信息,用户在更新页面做相应的修改,点击确定,将表单提交给controller,controller根据提交的用户信息进行对应的修改。
1.jsp页面实现跳转功能即更新页面;
allUser.jsp:
<a href="${pageContext.request.contextPath}/user/findOne.do?id=${userInfo.id}">更改</a>
updateUser.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>修改论文</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 引入 Bootstrap -->
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-header">
<h1>
基于SSM框架的管理系统:简单实现增、删、改、查。
</h1>
</div>
</div>
</div>
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-header">
<h1>
<small>修改用户</small>
</h1>
</div>
</div>
</div>
<form action="${pageContext.request.contextPath}/user/updateUser.do"
method="post">
<input type="hidden" name="id" value="${userInfo.id}"/>
用户姓名:<input type="text" name="username" value="${userInfo.username}"/>
用户密码:<input type="text" name="password" value="${userInfo.password}"/>
<input type="submit" value="提交" />
</form>
</div>
2.service层接口及实现类的编写,dao层的接口,UserMapper文件实现;
service接口:
public void updateUser(UserInfo userInfo);
public UserInfo findOne(int id);
service实现类:
@Override
public void updateUser(UserInfo user) {
userInfo.updateUser(user);
}
@Override
public UserInfo findOne(int id) {
return userInfo.findOne(id);
}
dao接口:
public void updateUser(UserInfo user);
public UserInfo findOne(int id);
UserMapper实现:
<update id="updateUser" parameterType="com.zhongruan.bean.UserInfo">
update userinfo set username = #{username},password = #{password}
where id = #{id}
</update>
<select id="findOne" parameterType="int" resultType="com.zhongruan.bean.UserInfo">
select * from userinfo where id = #{id}
</select>
controller实现:
@RequestMapping("/findOne.do")
public ModelAndView findOne(int id){
UserInfo userInfo = userService.findOne(id);
ModelAndView mv = new ModelAndView();
mv.addObject("userInfo",userInfo);
mv.setViewName("updateUser");
return mv;
}
@RequestMapping("/updateUser.do")
public String updateUser(UserInfo userInfo){
userService.updateUser(userInfo);
return "redirect:findAll.do";
}
4.易错点
1.要注意页面与controller间参数的传递,我在写这几个功能的时候因为这个问题一直出错;
2.注意统一命名,如果命名出现错误会很难找到出错的位置。