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>
四、 创建一个控制器(实质上就是一个类)
五、 创建一个内存数据库,将数据保存到集合里
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服务器,查看结果
九、 增加删除的操作(删除效果很容易就展示出来了)
/**
* 删除
* @return
*/
@RequestMapping("/deleteOne")
public String deleteOne(@RequestParam("id") int id){
Database.deleteOne(id);
//请求转发到/findAll该路径中,此处可以看出请求转发不经过浏览器,在服务器内部进行的操作
return "forward:/findAll";
}
十、 增加修改操作(先查询后删除)
/**
* 查询一条数据
*/
@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>
如下图,这是可以修改的
十一、 增加插入操作
/**
* 插入操作
*/
@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>
运行结果是成功的
总结: 在使用SpringMVC时,由于没有使用数据库mysql,我们很巧妙的使用了内存数据库来进行模拟操作。实质上内存数据库就是利用了static的生命周期特性,以及集合的添加、移除等相关操作。大家如果在操作的过程中出现什么问题,可以在下方留言,我们可以一起学习和进步。