【前言】
本文将使用spring+springMVC+jdbcTemplate,实现curd操作的一个小案例
一、搭建环境
(1)创建web工程
(2)创建数据库和数据表
部门表、员工表、用户表:
表结构:
(3)导入jar包
(4)配置spring框架
在src路径底下创建xml文件,配置以下内容:
- 开启组件扫描
- 配置德鲁伊连接池
- 创建JdbcTemplate对象
- 配置springMVC视图解析器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!--1 开启扫描-->
<context:component-scan base-package="com.mvclearn"></context:component-scan>
<!--2 配置德鲁伊连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 获取properties文件内容,根据key获取,使用spring表达式获取 -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///test_rest"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!--3 配置JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置映射解析器:如何将控制器返回的结果字符串,转换为一个物理的视图文件-->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
(5)配置springMVC
- 在web.xml文件中,配置核心控制器,中文乱码过滤器,提交方式转换过滤器。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 支持REST风格的过滤器:可以将POST请求转换为PUT或DELETE请求 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置springmvc核心控制器 DispatcherServlet-->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置DispatcherServlet的初始化參數:设置文件的路径和文件名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean.xml</param-value>
</init-param>
<!--让核心控制器在服务器启动时候创建-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置默认访问页面-->
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
</web-app>
二、登录功能
(1)创建框架
- controller service dao 实体类 和 注入关系
实体类:
package com.mvclearn.entity;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-08 17:09
**/
public class User {
private String id;
private String username;
private String password;
public String getId() {
return id;
}
public void setId(String 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;
}
}
注入关系:
controller注入service ——> service注入dao ——> dao注入jdbc template
controller:
package com.mvclearn.controller;
import com.mvclearn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-08 17:05
**/
@Controller
@RequestMapping("/user")
public class UserController {
//注入service
@Autowired
private UserService userService;
}
service:
package com.mvclearn.service.impl;
import com.mvclearn.dao.UserDao;
import com.mvclearn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-08 17:07
**/
@Service
public class UserServiceImpl implements UserService {
//注入dao
@Autowired
private UserDao userDao;
}
dao:
package com.mvclearn.dao.impl;
import com.mvclearn.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-08 17:08
**/
@Repository
public class UserDaoImpl implements UserDao {
//注入jdbc
@Autowired
private JdbcTemplate jdbcTemplate;
}
(2)编写controller
package com.mvclearn.controller;
import com.mvclearn.entity.User;
import com.mvclearn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-08 17:05
**/
@Controller
@RequestMapping("/user")
public class UserController {
//注入service
@Autowired
private UserService userService;
//登录
//不写方法,默认是get方法
@RequestMapping("/login",method = RequestMethod.POST)
public String login(User user){
//获取提交用户名和密码
//调用service
User userExists = userService.loginUser(user);
//判断是否提交成功
if (userExists != null){
//跳转到成功的页面
return "success";
}else {
//跳转到失败的页面
return "login";
}
}
}
(3)编写service
package com.mvclearn.service.impl;
import com.mvclearn.dao.UserDao;
import com.mvclearn.entity.User;
import com.mvclearn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-08 17:07
**/
@Service
public class UserServiceImpl implements UserService {
//注入dao
@Autowired
private UserDao userDao;
//登录
@Override
public User loginUser(User user) {
return userDao.loginUserDao(user);
}
}
(4)编写dao
package com.mvclearn.dao.impl;
import com.mvclearn.dao.UserDao;
import com.mvclearn.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-08 17:08
**/
@Repository
public class UserDaoImpl implements UserDao {
//注入jdbc
@Autowired
private JdbcTemplate jdbcTemplate;
//登录
@Override
public User loginUserDao(User user) {
String sql="select * from user where username=? and password=?";
User u = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getUsername(), user.getPassword());
return u;
}
}
注意:
user实体中属性名称,需要和表单中的name属性值一致
登录界面:
<%--
User: TXG
Date: 2021/9/9
Time: 11:18:01
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>人员管理系统登录</title>
</head>
<body>
<h1>欢迎来到人员管理系统</h1>
<form action="${pageContext.request.contextPath}/user/login" method="post">
username:<input type="text" name="username">
<br/>
password:<input type="password" name="password">
<br/>
<input type="submit" value="login">
</form>
</body>
</html>
(5)结果
输入正确的用户名和密码:
输入错误的用户名或密码:
三、增删改查功能
(一)查询功能
- 查询所有员工信息(包含员工所属部门信息)
(1)创建框架
- 同上面登录案例一样,创建controller service dao 和实体类和注入关系
(2)编写后台代码
package com.mvclearn.dao.impl;
import com.mvclearn.dao.EmpDao;
import com.mvclearn.entity.Dept;
import com.mvclearn.entity.Emp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
* @program: springmvclearn
* @description:
* @author: txg
* @create: 2021-09-09 12:09
**/
@Repository
public class EmpDaoImpl implements EmpDao {
//注入jdbc
@Autowired
private JdbcTemplate jdbcTemplate;
//查询所有员工
@Override
public List<Emp> findAll() {
try {
String sql="SELECT * FROM t_emp emp,t_dept dept WHERE emp.deptid=dept.deptid";
//查询数据有多张表,有关联数据,在jdbcTemplate提供封装对象,需要自己编写封装实现
List<Emp> list = jdbcTemplate.query(sql, new MyBeanMapper());
return list;
}catch (Exception e){
return null;
}
}
}
//一个文件中可以有多个类,但是只能有一个public修饰的类
//创建类,实现RowMapper接口,实现数据封装
class MyBeanMapper implements RowMapper<Emp>{
@Override
public Emp mapRow(ResultSet rs, int i) throws SQLException {
//1 从ResultSet把结果获取出来
String eid = rs.getString("eid");
String ename = rs.getString("ename");
String address = rs.getString("address");
String deptid = rs.getString("deptid");
String deptname = rs.getString("deptname");
//2 把获取出来的数据封装到对象里面,并返回
Emp emp = new Emp();
emp.setEid(eid);
emp.setEname(ename);
emp.setAddress(address);
//封装dept
Dept dept = new Dept();
dept.setDeptid(deptid);
dept.setDeptname(deptname);
//dept对象设置到emp里
emp.setDept(dept);
//返回
return emp;
}
}
(3)编写前台代码
添加 查询页面 和 登录成功后点击查询进入查询页面的超链接
list.jsp:
<%--
User: TXG
Date: 2021/9/10
Time: 10:45:50
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>查询</title>
</head>
<body>
<h1>所有员工信息</h1>
<table border="1">
<tr>
<th>员工id</th>
<th>员工名称</th>
<th>员工地址</th>
<th>部门名称</th>
</tr>
<c:forEach items="${list}" var="emp">
<tr>
<td>${emp.eid}</td>
<td>${emp.ename}</td>
<td>${emp.address}</td>
<td>${emp.dept.deptname}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
success.jsp:
<%--
User: TXG
Date: 2021/9/9
Time: 11:25:31
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>欢迎</title>
</head>
<body>
<h1>登录成功</h1>
<a href="${pageContext.request.contextPath}/emp/findAll">显示所有员工</a>
</body>
</html>
(4)结果
点击“显示所有员工”:
(二)添加功能
- 添加员工信息(包含员工所属部门信息)
(1)后台代码
controller:
//添加员工
@RequestMapping(value = "addEmp",method = RequestMethod.POST)
public String addEmp(Emp emp){
empService.add(emp);
//添加之后,重新执行查询所有员工的方法(更新数据)
return "redirect:/emp/findAll";
}
//添加员工
//到添加员工页面
@RequestMapping("/toAddPage")
public String toAddPage(Model model){
//查询所有部门,传递给页面显示
List<Dept> list = empService.findAllDept();
model.addAttribute("deptList",list);
return "add";
}
Service实现类:
//查询有所部门
@Override
public List<Dept> findAllDept() {
return empDao.findAllDept();
}
//添加员工
@Override
public void add(Emp emp) {
empDao.addEmp(emp);
}
Dao实现类:
//查询所有部门
@Override
public List<Dept> findAllDept() {
String sql = "select * from t_dept";
List<Dept> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Dept>(Dept.class));
return list;
}
//添加员工
@Override
public void addEmp(Emp emp) {
String sql="insert into t_emp values(?,?,?,?)";
//手动生成id值
String eid = UUID.randomUUID().toString().replaceAll("-","");
jdbcTemplate.update(sql,eid,emp.getEname(),emp.getAddress(),emp.getDept().getDeptid());
}
}
(2)前台代码
add.jsp:
<%--
User: TXG
Date: 2021/9/10
Time: 11:50:18
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>添加</title>
</head>
<body>
<h1>添加员工信息</h1>
<form action="${pageContext.request.contextPath}/emp/addEmp" method="post">
员工名称:<input type="text" name="ename"/><br/>
员工地址:<input type="text" name="address"/><br/>
所属部门:
<select name="dept.deptid">
<%--<option value="1">技术部</option>--%>
//下面是循环遍历的写法
<c:forEach items="${deptList}" var="dept">
<option value="${dept.deptid}">${dept.deptname}</option>
</c:forEach>
</select>
<br/>
<input type="submit" value="添加">
</form>
</body>
</html>
(3)结果
点击“添加员工”:
添加后跳转到员工信息页面:
(三)删除功能
- 删除员工信息,有两种删除方式:
①物理删除:删除后,数据库中就不存在这条员工信息了。
②逻辑删除:删除只是修改了数据库表中的某个字段(作为是否删除的标识),又称假删除。
(1)后台代码
①物理删除:
Controller:
//删除员工
@RequestMapping(value = "/delEmp/{eid}",method = RequestMethod.DELETE)
public String delEmp(@PathVariable("eid") String eid){
empService.deleteEmp(eid);
//删除之后,重定向到查询所有员工的页面
return "redirect:/emp/findAll";
}
Service实现类:
//删除员工
@Override
public void deleteEmp(String eid) {
empDao.delEmp(eid);
}
Dao实现类:
//删除员工
@Override
public void delEmp(String eid) {
String sql="delete * from t_emp where eid=?";
jdbcTemplate.update(sql,eid);
}
②逻辑删除:
在数据库表中添加标识是否删除的字段:
(2)前台代码
list.jsp:
<%--
User: TXG
Date: 2021/9/10
Time: 10:45:50
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>查询</title>
</head>
<body>
<h1>所有员工信息</h1>
<table border="1">
<tr>
<th>员工id</th>
<th>员工名称</th>
<th>员工地址</th>
<th>部门名称</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="emp">
<tr>
<td>${emp.eid}</td>
<td>${emp.ename}</td>
<td>${emp.address}</td>
<td>${emp.dept.deptname}</td>
<%-- href=# 表示超链接不生效,一般只在onclick时用:这样可以显示链接效果,但不做跳转--%>
<%--也可用 href="javascript:void(0)" 来表示不使超链接生效--%>
<td><a href="#" onclick="del('${emp.eid}')">删除</a></td>
</tr>
</c:forEach>
</table>
<form id="formid" method="post">
<input type="hidden" name="_method" value="delete">
</form>
</body>
<script>
//删除用户
function del(eid) {
//弹框提示,获取返回值(点击确定返回true,单击取消返回false)
var flag = confirm("是否删除该员工")
if (flag){
//js提交表单
//获取form标签
var formData = document.getElementById("formid")
//设置form表单action属性值
formData.action="${pageContext.request.contextPath}/emp/delEmp/"+eid
//表单提交
formData.submit()
}
}
</script>
</html>
(3)结果
前台页面:
(四)修改功能
- 修改员工信息:
- 点击显示所有员工,跳转到所有员工信息页面;
- 点击修改,跳转到添加修改员工信息页面,进行修改后保存;
(1)后台代码
controller:
//修改员工
@RequestMapping(value = "/updateEmp",method = RequestMethod.PUT)
public String updateEmp(Emp emp){
empService.updateEmp(emp);
return "redirect:/emp/findAll";
}
//修改数据回显
@RequestMapping("/toUpdateEmp/{eid}")
public String toUpdateEmp(@PathVariable("eid") String eid,Model model){
//根据员工id查询员工信息,包含所属部门信息
Emp emp = empService.findEmpId(eid);
//查询所有部门
List<Dept> deptList = empService.findAllDept();
model.addAttribute("emp",emp);
model.addAttribute("deptList",deptList);
return "update";
}
Service实现类:
//根据员工id查询员工信息,包含所属部门信息
@Override
public Emp findEmpId(String eid) {
return empDao.findEmpById(eid);
}
//修改员工信息
@Override
public void updateEmp(Emp emp) {
empDao.updateEmp(emp);
}
Dao实现类:
//根据员工id查询员工信息,包含所属部门信息
@Override
public Emp findEmpById(String eid) {
String sql ="SELECT * FROM t_emp emp,t_dept dept WHERE emp.`deptid`=dept.`deptid` AND eid=?";
Emp emp = jdbcTemplate.queryForObject(sql, new MyBeanMapper(), eid);
return emp;
}
//修改员工
@Override
public void updateEmp(Emp emp) {
String sql="update t_emp set ename=?,address=?,deptid=? where eid=?";
Object[] paramas ={emp.getEname(),emp.getAddress(),emp.getDept().getDeptid(),emp.getEid()};
jdbcTemplate.update(sql,paramas);
}
(2)前台代码
list.jsp:
<td>
<a href="#" onclick="del('${emp.eid}')">删除</a>
<a href="${pageContext.request.contextPath}/emp/toUpdateEmp/${emp.eid}">修改</a>
</td>
update.jsp:
<%--
User: TXG
Date: 2021/9/11
Time: 19:54:54
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>修改员工信息</h1>
<form action="${pageContext.request.contextPath}/emp/updateEmp" method="post">
<input type="hidden" name="_method" value="put">
<input type="hidden" name="eid" value="${emp.eid}"/>
员工名称:<input type="text" name="ename" value="${emp.ename}"/><br/>
员工地址:<input type="text" name="address" value="${emp.address}"/><br/>
所属部门:
<select name="dept.deptid">
<%--<option value="1">技术部</option>--%>
<%--下面是循环遍历的写法--%>
<c:forEach items="${deptList}" var="dept">
<option value="${dept.deptid}" <c:if test="${emp.dept.deptid == dept.deptid}">selected</c:if>>${dept.deptname}</option>
</c:forEach>
</select>
<br/>
<input type="submit" value="修改">
</form>
</body>
</html>
(3)结果
所有员工信息页面:
修改页面:
修改成功:
四、其他完善功能
完善一些小功能,第一个是实现图片上传,第二个是实现批量删除功能
(一)员工信息上传(图片)
实现员工图片信息的上传
(1)导入jar包
(2)修改表结构
并在对应实体里,添加 imgpath 字段
(3)在spring配置文件中配置文件上传解析器
<!-- 文件上传解析器-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="1024000"></property>
</bean>
(4)表单页面
<body>
<h1>添加员工信息</h1>
<%---------------------------新添加------------------------%>
<form action="${pageContext.request.contextPath}/emp/addEmp" method="post" enctype="multipart/form-data">
员工名称:<input type="text" name="ename"/><br/>
员工地址:<input type="text" name="address"/><br/>
所属部门:
<select id="s1" name="dept.deptid">
<%--<option value="1">技术部</option>--%>
<%--下面是循环遍历的写法--%>
<%-- <c:forEach items="${deptList}" var="dept">--%>
<%-- <option value="${dept.deptid}">${dept.deptname}</option>--%>
<%-- </c:forEach>--%>
</select>
<%---------------------------新添加------------------------%>
上传图片:<input type="file" name="file"/><br/>
<input type="submit" value="添加">
</form>
</body>
(5)后台代码
controller:
//添加的方法
@RequestMapping(value = "/addEmp",method = RequestMethod.POST)
public String addEmp(Emp emp, MultipartFile file, HttpServletRequest request) throws IOException {
//文件上传
String originalFilename = file.getOriginalFilename();
//创建服务器文件
ServletContext servletContext = request.getServletContext();
String realPath = servletContext.getRealPath("/upload");
System.out.println("realpath:"+realPath);
File serverFile = new File(realPath+"/"+originalFilename);
if(!serverFile.exists()) {
serverFile.mkdirs();
}
//上传过程
file.transferTo(serverFile);
//把上传文件路径
emp.setImgpath("/upload/"+originalFilename);
empService.add(emp);
//添加之后,执行查询所有员工的方法,查询添加之后最新数据
return "redirect:/emp/findAll";
}
dao实现类:
//添加员工
@Override
public void addEmp(Emp emp) {
String sql="insert into t_emp values(?,?,?,?,?)";
//手动生成id值
String eid = UUID.randomUUID().toString().replaceAll("-","");
jdbcTemplate.update(sql,eid,emp.getEname(),emp.getAddress(),emp.getDept().getDeptid(),emp.getImgpath());
}
结果:
添加员工信息:
添加成功:
打开路径:
(二)批量删除员工
(1)表单页面
在列表页面中,在每条记录前面添加复选框,添加表单用于提交
<%--
User: TXG
Date: 2021/9/10
Time: 10:45:50
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>查询</title>
</head>
<body>
<h1>所有员工信息</h1>
<form action="${pageContext.request.contextPath}/emp/delMore" method="post">
<input type="submit" value="批量删除">
<table border="1">
<tr>
<th><input type="checkbox"></th>
<th>员工id</th>
<th>员工名称</th>
<th>员工地址</th>
<th>部门名称</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="emp">
<tr>
<th><input type="checkbox" name="ids" value="${emp.eid}"></th>
<td>${emp.eid}</td>
<td>${emp.ename}</td>
<td>${emp.address}</td>
<td>${emp.dept.deptname}</td>
<%--href=# 表示超链接不生效,一般只在onclick时用:这样可以显示链接效果,但不做跳转--%>
<td>
<a href="#" onclick="del('${emp.eid}')">删除</a>
<a href="${pageContext.request.contextPath}/emp/toUpdateEmp/${emp.eid}">修改</a>
</td>
</tr>
</c:forEach>
</table>
</form>
<form id="formid" method="post">
<input type="hidden" name="_method" value="delete">
</form>
</body>
<script>
//删除用户
function del(eid) {
//弹框提示,获取返回值(点击确定返回true,单击取消返回false)
var flag = confirm("是否删除该员工")
if (flag){
//js提交表单
//获取form标签
var formData = document.getElementById("formid")
//设置form表单action属性值
formData.action="${pageContext.request.contextPath}/emp/delEmp/"+eid
//表单提交
formData.submit()
}
}
</script>
</html>
(2)后台代码
controller方法里面获取删除员工的id值(多个),使用数组获取
controller:
//批量删除员工
@RequestMapping(value = "/delMore",method = RequestMethod.POST)
public String delMore(@RequestParam("ids") String[] ids){
empService.deleteEmpMore(ids);
return "redirect:/emp/findAll";
}
service实现类:
//批量删除员工
@Override
public void deleteEmpMore(String[] ids) {
//遍历所有id数组,得到每个id,调用dao方法,一个一个删除
for (String id : ids){
empDao.delEmp(id);
}
}
结果:
选中要批量删除的用户:
数据已删除:
【结语】
以上就是使用spring+springMVC+jdbcTemplate,实现curd操作的一个小案例
感谢阅读~