ssm数据修改的实现

0.修改功能概述

修改功能不是只有修改,在点击修改后
1.先跳出点击id的查询结果显示在jsp界面
2.然后修改文本框的内容可供修改
3.最后修改完点击提交按钮,将信息传给服务器

技术难点:如何让查询时候的id到跳转到更新界面继续根据这个id修改数据?

1.创建控制层创建doorInfo方法,根据id查询,

记录下传给服务器的id,
再将查询结果封装给door对象,
再利用model.addAttribute方法把door放到域中,
最后跳转到门店修改界面door_update.jsp

/*4.根据id查询门店
	 * 	将查询到的门店信息带到门店修改页面,进行数据回显
	 */
	@RequestMapping("/doorInfo")
	public String doorInfo(Integer id,Model model){
		//调用DoorMapper的findById方法,根据id查询门店信息
		Door door = dao.findById( id );
		//将门店信息带回门店修改界面进行回显
		model.addAttribute("door",door);
		//转发到门店修改界面
		return "door_update";
	}

2.如何在door_update.jsp中接收到服务器传过来的参数? ${door.xxx}

2.1小技巧:如何让传过来的id值不显示,但是到修改时照样可以用?
hidden标签:,偷偷摸摸加载,但不显示.

<form action="doorUpdate" method="POST">
		<!-- hidden隐藏域,在提交表单时连door.id一起提交 -->
		<input type="hidden" name="id" value="${ door.id }"/>
		<table border="1">
			<tr>
				<td width="30%">门店名称</td>
				<td>
					<input type="text" name="name" value="${ door.name }"/>
				</td>
			</tr>
			<tr>
				<td>联系电话</td>
				<td>
					<input type="text" name="tel" value="${ door.tel }"/>
				</td>
			</tr>
			<tr>
				<td>门店地址</td>
				<td>
					<input type="text" name="addr" value="${ door.addr }"/>
				</td>
			</tr>
			
			<tr>
				<td colspan="2">
					<input type="submit" value="提	交" />
				</td>
			</tr>
		</table>
	</form>

3.在door_update.jsp的form表单点击提交后,跳转到真正的修改方法里,

4.在控制类写根据id修改门店的方法,此时获取的door对象,为查询时封装好返回的door.

/*5.根据id修改门店信息*/
	@RequestMapping("/doorUpdate")
	public String doorUpdate(Door door){
		//调用DoorMapper的updateById方法,根据id修改门店信息
		dao.updateById( door );
		//跳转到查询所有门店的方法
		return "forward:/doorList";
	}

5.点击dao.updateById( door );在DoorMapper接口自动生成updateById(door)方法

/** 5.根据id修改门店信息*/
	public void updateById(Door door);

6.在DoorMapper.xml中写根据id修改门店信息的sql语句

<!--5.根据id修改门店信息,id值等于方法名  -->
	<update id="updateById">
		update tb_door set name=#{name},tel=#{tel},addr=#{addr}
		where id=#{id}
	</update>

接口DoorMapper.java

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 门店表的映射文件 namespace值为对应接口的全路径 -->
<mapper namespace="com.tedu.dao.DoorMapper">
	<!-- 1.查询所有门店信息,id值为对应接口中方法的名字 resultType指定将查询的结果封装到哪个pojo对象中 -->
	<select id="findAll" resultType="com.tedu.pojo.Door">
		select * from tb_door
	</select>
	
	<!--2.根据id删除门店信息 -->
	<delete id="deleteById">
		delete from tb_door where id=#{id}
	</delete>
	
	<!--3.添加门店信息  -->
	<insert id="add">
		insert into tb_door values(null,#{name},#{tel},#{addr})
	</insert>
	
	<!--4.根据id查询信息  -->
	<select id="findById" resultType="com.tedu.pojo.Door">
		select * from tb_door where id = #{id}
	</select>
	
	<!--5.根据id修改门店信息,id值等于方法名  -->
	<update id="updateById">
		update tb_door set name=#{name},tel=#{tel},addr=#{addr}
		where id=#{id}
	</update>
</mapper>

DoorMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 门店表的映射文件 namespace值为对应接口的全路径 -->
<mapper namespace="com.tedu.dao.DoorMapper">
	<!-- 1.查询所有门店信息,id值为对应接口中方法的名字 resultType指定将查询的结果封装到哪个pojo对象中 -->
	<select id="findAll" resultType="com.tedu.pojo.Door">
		select * from tb_door
	</select>
	
	<!--2.根据id删除门店信息 -->
	<delete id="deleteById">
		delete from tb_door where id=#{id}
	</delete>
	
	<!--3.添加门店信息  -->
	<insert id="add">
		insert into tb_door values(null,#{name},#{tel},#{addr})
	</insert>
	
	<!--4.根据id查询信息  -->
	<select id="findById" resultType="com.tedu.pojo.Door">
		select * from tb_door where id = #{id}
	</select>
	
	<!--5.根据id修改门店信息,id值等于方法名  -->
	<update id="updateById">
		update tb_door set name=#{name},tel=#{tel},addr=#{addr}
		where id=#{id}
	</update>
</mapper>

控制类DoorController.java

package com.tedu.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import com.tedu.dao.DoorMapper;
import com.tedu.pojo.Door;

/*@Controller:(1)表示当前类属于controller层
 * 标识当前类的对象的创建由spring容器负责
 */
@Controller
public class DoorController {
	
	/** 自动装配:由spring自动为属性赋值(对象)  
	 * spring的核心配置稳文件中配置过自动扫描包,程序执行时,
	 * 框架底层会扫描所有mapper接口,为接口提供提供子类并根据子类创建实例
	 * 即接口的子类实例,@Autowired可以根据接口的类型到spring容器中获取
	 * 接口的子类实例,并赋值给dao
	 * 
	 * */
	@Autowired
	private DoorMapper dao;
	
	/*1.查询所有门店的信息*/
	@RequestMapping("/doorList")
	public String doorList( Model model ){
		
		//调用DoorMapper的findAll方法查询所有门店信息
		List<Door> list = dao.findAll();
		//将门店集合存入到Model中
		model.addAttribute("list", list);
		//跳转到门店(door_list.jsp)页面(在该页面中展示所有门店信息)
		return "door_list";
	}
	
	/*2.根据id删除门店信息*/
	@RequestMapping("/doorDelete")
	public String doorDelete(Integer id){
		//调用DoorMapper的deleteById方法,根据id删除门店信息
		dao.deleteById( id );
		//删除成功后
		return "forward:/doorList"; //跳转到门店列面页面
	}
	
	/*3.添加门店信息
	 * 接收客户端传过来的信息(name,tel,addr)
	 * 跳转到查询所有门店的方法,显示最新的门店信息
	 * */
	@RequestMapping("/doorAdd")
	public String doorAdd(Door door){
		dao.add( door );
		return "forward:/doorList";
	}
	
	/*4.根据id查询门店
	 * 	将查询到的门店信息带到门店修改页面,进行数据回显
	 */
	@RequestMapping("/doorInfo")
	public String doorInfo(Integer id,Model model){
		//调用DoorMapper的findById方法,根据id查询门店信息
		Door door = dao.findById( id );
		//将门店信息带回门店修改界面进行回显
		model.addAttribute("door",door);
		//转发到门店修改界面
		return "door_update";
	}
	
	/*5.根据id修改门店信息*/
	@RequestMapping("/doorUpdate")
	public String doorUpdate(Door door){
		//调用DoorMapper的updateById方法,根据id修改门店信息
		dao.updateById( door );
		//跳转到查询所有门店的方法
		return "forward:/doorList";
	}
	
	/** 声明一个页面跳转方法,通过访问jsp的名字可以跳转到/WEB-INF/pages/下面指定名字的jsp页面
	 * 其中{}的jspName 用于接收访问的路径名,例如:
	 * 例如:访问路径为 "/index",则方法最后返回的值为:"index"
	 * 即最终返回 /WEB-INF/pages/index.jsp
	 * 此时,jspName的值就是index
	 * 再将{}中jspName的值传递给方法上的形参jspName,值也为jspName
	 * 然后 形参jspName的值传给return上的jspName
	 * 最终跳转到对应的jap界面
	 * 
	 */
	/*测试3:跳转对应jsp的通用方法*/
	@RequestMapping("/{jspName}")
	public String page(@PathVariable String jspName){
		return jspName;
	}
	
	
	/*	原始跳转方法
	 * 	@RequestMapping("/index")
		public String index(){
			return "index"; //跳转到_top.jsp
		}*/
		

	/*测试2:测试ssm的运行环境*/
	//@RequestMapping("/testssm")
	public String testssm(){
		System.out.println("DoorController.testssm()...");
		List<Door> list = dao.findAll();
		for(Door door:list){
			System.out.println(door);
		}
		
		return "test";
	}
	
	/*测试1:测试springmvc的运行环境*/
	@RequestMapping("/hello")
	public String hello(){
		System.out.println("DoorController.hello()...");
		return "test";
	}
}

更新界面door_update.jsp

<%@ page pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>修改门店</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
	body{ font-family: "微软雅黑"; background-color: #EDEDED; }
	h2{ text-align: center;font-size:26px; }
	table{ margin: 30px auto; text-align: center; border-collapse:collapse; width:50%; }
	td, th{ padding: 7px;font-size:18px;}
	hr{ margin-bottom:20px; border:1px solid #aaa; }
	input,select,textarea{ width:284px; height:30px; background:#EDEDED; border:1px solid #999; text-indent:5px; font-size:18px; }
	input[type='submit']{ width:130px; height:36px; cursor:pointer; border-radius:5px 5px 5px 5px; background:#ddd; }
	select{text-indent:0px;}
	textarea{height:100px;font-size:22px;}
</style>

<script type="text/javascript">
</script>
</head>
<body>
	<h2>修改门店</h2>
	<hr/>
	<form action="doorUpdate" method="POST">
		<!-- hidden隐藏域,在提交表单时连door.id一起提交 -->
		<input type="hidden" name="id" value="${ door.id }"/>
		<table border="1">
			<tr>
				<td width="30%">门店名称</td>
				<td>
					<input type="text" name="name" value="${ door.name }"/>
				</td>
			</tr>
			<tr>
				<td>联系电话</td>
				<td>
					<input type="text" name="tel" value="${ door.tel }"/>
				</td>
			</tr>
			<tr>
				<td>门店地址</td>
				<td>
					<input type="text" name="addr" value="${ door.addr }"/>
				</td>
			</tr>
			
			<tr>
				<td colspan="2">
					<input type="submit" value="提	交" />
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

查询结果界面door_list.jsp

<%@ page pageEncoding="utf-8"%>
<%-- 引入JSTL标签库 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<title>门店管理</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
body {
	font-family: "微软雅黑";
	background-color: #EDEDED;
}

h2 {
	text-align: center;
}

table {
	width: 96%;
	margin: 0 auto;
	text-align: center;
	border-collapse: collapse;
	font-size: 16px;
}

td, th {
	padding: 5px;
}

th {
	background-color: #DCDCDC;
	width: 120px;
}

th.width-40 {
	width: 40px;
}

th.width-70 {
	width: 70px;
}

th.width-80 {
	width: 80px;
}

hr {
	margin-bottom: 20px;
	border: 1px solid #aaa;
}

#add-door {
	text-align: center;
	font-size: 20px;
}
</style>

<script type="text/javascript">
	
</script>
</head>
<body>
	<h2>门店管理</h2>
	<div id="add-door">
		<a href="door_add" target="rightFrame">新增门店</a>
	</div>
	<hr />
	<table border="1">
		<tr>
			<th class="width-40">序号</th>
			<th>门店名称</th>
			<th class="width-80">联系电话</th>
			<th>门店地址</th>
			<th class="width-80">操 作</th>
		</tr>

		<!-- 模版数据 -->
		<!-- door.getName = door.name  
			varStatus:  表示集合中每个元素的相关信息,4种状态:
				index(所在位置,即索引) .count(总共已迭代的次数)
				.first(是否为第一个位置) last(是否为最后一个位置)
		-->
		<c:forEach items="${ list }" var="door" varStatus="status">
			<tr>
				<td>${ status.count }</td>
				<td>${ door.name }</td>
				<td>${ door.tel }</td>
				<td>${ door.addr }</td>
				<td><a href="doorDelete?id=${ door.id }">删除</a> 
					&nbsp;| &nbsp;
					<a href="doorInfo?id=${ door.id }">修改</a>
				</td>
			</tr>
		</c:forEach>


	</table>
</body>
</html>




原创文章 36 获赞 8 访问量 2767

猜你喜欢

转载自blog.csdn.net/qq_41398619/article/details/105482120