SpringMVC的增删改查

1、什么是SpringMVC?

SpringMVC是一个表现层框架,负责接收用户的请求,通过控制器,对用户的请求进行处理,经过视图解析器,给用户响应。
SpringMVC由几大组件构成:DispatcherServlet、XXXHandlerMapping、Controller、InternalResourceViewResolver。

2、搭建SpringMVC的环境

一、 在pom.xml文件中导入相关的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.zyyx</groupId>
    <artifactId>springmvc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- 引入SpringMVC的依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.3.RELEASE</version>
        </dependency>
        <!-- 因为是Web项目,需要引入servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <!-- 在项目中,我们需要在jsp使用jstl,所以导入jstl的依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
</project>

二、 在web.xml文件中配置请求分发器DispatcherServlet

<!-- 配置请求分发器 -->
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

三、 创建dispatcher-servlet.xml文件,配置SpringMVC映射处理器的注解驱动和视图解析器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                          http://www.springframework.org/schema/beans/spring-beans.xsd
                          http://www.springframework.org/schema/mvc
                          http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
                          http://www.springframework.org/schema/context
                          http://www.springframework.org/schema/context/spring-context-4.3.xsd">
      <!-- mvc的注解驱动基于扫描器 -->
      <context:component-scan base-package="cn.zyyx.web.controller"/>
      <!-- 配置SpringMVC的注解驱动 -->
      <mvc:annotation-driven/>
      <!-- 配置视图解析器 -->
       <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           <!-- 返回逻辑名称的前缀 -->
           <property name="prefix" value="/"/>
           <!-- 返回逻辑名称的后缀 -->
           <property name="suffix" value=".jsp"/>
       </bean>
</beans>

四、 创建一个控制器(实质上就是一个类)

spring layui 增删改查简单示例_User


五、 创建一个内存数据库,将数据保存到集合里

package cn.zyyx.database;

import cn.zyyx.domain.User;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 紫炎易霄
 */
public class Database {
    /**
     * 相当于数据库里面的数据
     */
    public static Map<Integer, User> userMap = new HashMap<Integer, User>();
    static {
        int count = 10;
        for(int i = 1 ; i < count ; i++){
            User user = new User();
            user.setId(i);
            user.setName("紫炎易霄"+i);
            user.setAge(i+2);
            userMap.put(i,user);
        }
    }
    /**
     * 查询集合里面的所有对象
     * @return
     */
    public static List<User> getAll(){
        return new ArrayList<User>(userMap.values());
    }
    /**
     * 删除
     */
    public static void deleteOne(Integer id){
        userMap.remove(id);
    }
    /**
     * 插入一条数据
     */
    public static void insertOne(User user){
        userMap.put(user.getId(),user);
    }
    /**
     * 修改
     */
    public static void updateOne(User user){
        userMap.put(user.getId(),user);
    }
    /**
     * 查询一条数据
     */
    public static User findOne(Integer id){
        User user = userMap.get(id);
        return user;
    }
}

六、 在控制器中创建一个方法,向页面返回查询到的所有对象

/**
 * @author 紫炎易霄
 */
@Controller
public class UserController {
    @RequestMapping("/fingAll")
    public String findAll(Model model){
        List<User> userList = Database.getAll();
        model.addAttribute("users",userList);
        return "index";
    }
}

七、 编写返回的index.jsp页面

<%@ 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>
    <table border="1">
      <tr>
        <td>id</td>
        <td>name</td>
        <td>age</td>
      </tr>
      <c:forEach items="${users}" var="user">
        <tr>
          <td><c:out value="${user.id}"/></td>
          <td><c:out value="${user.name}"/></td>
          <td><c:out value="${user.age}"/></td>
          <!-- 后面的删除操作 -->
          <td><a href="/deleteOne?id=${user.id}">删除</a></td>
        </tr>
      </c:forEach>
    </table>
  </body>
</html>

八、 启动tomcat服务器,查看结果

spring layui 增删改查简单示例_User_02


九、 增加删除的操作(删除效果很容易就展示出来了)

/**
     * 删除
     * @return
     */
    @RequestMapping("/deleteOne")
    public String deleteOne(@RequestParam("id") int id){
        Database.deleteOne(id);
        //请求转发到/findAll该路径中,此处可以看出请求转发不经过浏览器,在服务器内部进行的操作
        return "forward:/findAll";
    }

spring layui 增删改查简单示例_spring_03


十、 增加修改操作(先查询后删除)

/**
     * 查询一条数据
     */
    @RequestMapping("/findOne")
    public String findOne(@RequestParam("id") int id,Model model){
        User user = Database.findOne(id);
        model.addAttribute("user",user);
        return "add";
    }
    /**
     * 更新操作
     */
    @RequestMapping("/updateOne")
    public String updateOne(User user){
        Database.updateOne(user);
        return "forward:findAll";
    }

jsp页面

<%@ 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>
    <form action="/updateOne" method="post">
      <input type="hidden" name="id" value="${user.id}"><br>
      name:<input type="text" name="name" value="${user.name}"><br>
      age:<input type="text" name="age" value="${user.age}"><br>
      <input type="submit">
    </form>
  </body>
</html>

如下图,这是可以修改的

spring layui 增删改查简单示例_spring_04


十一、 增加插入操作

/**
     * 插入操作
     */
    @RequestMapping("/saveOne")
    public String saveOne(User user){
        Database.insertOne(user);
        //因为请求转发对于写操作比较敏感,我们使用重定向
        return "redirect:findAll";
    }

jsp页面

<%@ 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>
    <form action="/saveOne" method="post">
      id:<input type="text" name="id" value="${user.id}"><br>
      name:<input type="text" name="name" value="${user.name}"><br>
      age:<input type="text" name="age" value="${user.age}"><br>
      <input type="submit">
    </form>
  </body>
</html>

运行结果是成功的

spring layui 增删改查简单示例_spring_05


总结: 在使用SpringMVC时,由于没有使用数据库mysql,我们很巧妙的使用了内存数据库来进行模拟操作。实质上内存数据库就是利用了static的生命周期特性,以及集合的添加、移除等相关操作。大家如果在操作的过程中出现什么问题,可以在下方留言,我们可以一起学习和进步。