【SpringMVC】curd经典案例(超详细,完整)


【前言】

本文将使用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操作的一个小案例

本文代码资源 点击下载


感谢阅读~

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cakeAndAle

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

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

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

打赏作者

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

抵扣说明:

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

余额充值