springBoot整合mybatis01
- springBoot整合mybatis01
- 一、登录功能
- 二、整合mybatis,测试环境
- 1、导入依赖包:
- 2、注意报红问题,解决Maven工程中不识别mybatis的Mapper.xml文件问题
- 3、在resources目录文件夹下新建mybatis文件夹,新建mybatis配置文件mybatis-config.xml
- 4、在mybatis目录文件夹下新建mapper文件夹,新建MyBatis映射文件UserMapper.xml
- 5、在com.news包下新建domain包,新建user类和UserMapper接口
- 6、新建service层,创建UserService接口类,并创建UserServiceImpl类继承UserService接口,并实现方法
- 7、修改配置文件application.yml
- 8、修改开发环境配置文件application-dev.yml
- 9、UserController.java类创建getUser方法,测试配置环境
- 10、最后启动,浏览器输入地址:http://localhost:9090/news/getUser?uname=admin&&upwd=admin
- 三、SpringBoot配置druid数据源
- 四、用户列表:
- 五、错误处理405
- 六、添加、修改、删除用户操作:
- 七、修改用户:
- 八、添加用户:
- 九、删除用户:
- 十、删除用户-加强版:
springBoot整合mybatis01
参看文档:
SpringBoot整合Mybatis:https://blog.csdn.net/iku5200/article/details/82856621
Thymeleaf入门到吃灰 :https://www.cnblogs.com/msi-chen/p/10974009.html
Thymeleaf 中文官方教程: https://www.docs4dev.com/docs/zh/thymeleaf/3.0/reference/using_thymeleaf.html#introducing-thymeleaf.
SpringBoot日记——Thymeleaf模板引擎篇: https://www.cnblogs.com/iceb/p/9212484.html.
Thymeleaf 教程: https://fanlychie.github.io/post/thymeleaf.html#8-1-1-%E5%8D%95%E8%A1%8C%E6%B3%A8%E9%87%8A.
一、登录功能
文件层次结构:
1、在templates 下,编写一个login登录页面
login.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<!--Thymeleaf模板引擎,返回一个请求,方法为post-->
<form th:action="@{/login}" method="post">
<!--Thymeleaf模板引擎,显示错误信息-->
<p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
<div>
用户名:<input name="uname" type="text"/>
</div><br/>
<div>
密码:<input name="upwd" type="password"/>
</div><br/>
<button type="submit">登 录</button>
</form>
</body>
</html>
2、在controller包下创建UserController.java
UserController.java
//@RestController替代 @Controller + @ResponseBody
//@Controller用于标注控制层组件(如struts中的action)
@Controller
public class UserController {
//处理登录请求,点击登录按钮
@PostMapping("/login")
public String login(String uname, String upwd, Model model, HttpSession session){
//判断用户名是admin且密码是admin,登录成功,否则重新登录
User user=userService.getLoginUser(uname, upwd);
if (user!=null){
//把用户名和密码保存到session对象中
session.setAttribute("user", user);
//登录成功,打开主页
return "redirect:/main.html";
}else {
//把信息保存到model对象中
model.addAttribute("msg", "用户名或密码输入错误");
//登陆失败,打开登录界面
return "login";
}
}
}
3、在配置文件config包下注册视图控制器:页面输入请求打开对应的视图,MyMvcConfig.java
创建MyMvcConfig.java配置文件,继承WebMvcConfigurationSupport,重写接口中的addViewControllers方法
//@Configuration用于定义配置类,可替换xml文件;定义一个拦截器,相当于之前的mvc里的配置
@Configuration
public class MyMvcConfig extends WebMvcConfigurationSupport {//扩展SpringMVC的功能
//注册视图控制器:页面输入请求打开对应的视图
@Override
protected void addViewControllers(ViewControllerRegistry registry) {
//打开登录页面
//注册.添加视图控制器(url路径)
//含义:发送请求/时,打开login视图
registry.addViewController("/").setViewName("login");
registry.addViewController("/index.html").setViewName("login");
//打开主页面
registry.addViewController("/main.html").setViewName("main");
}
}
4、进行页面登录检查,不登录其他页面就不能直接访问
新建包名component,新建LoginHandlerInterceptor.java文件
LoginHandlerInterceptor.java
/**
* 登录检查,不登录其他页面就不能直接访问
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//判断用户是否登录状态,如果是登陆可以访问,否则,提示没有权限,跳转到登录界面
//从session中获取user结果
Object user=request.getSession().getAttribute("user");
//编写拦截规则
// true:通过
// false:不通过
if (user==null){
//未登录
request.setAttribute("msg", "没有权限,请先登录");
request.getRequestDispatcher("/").forward(request, response);
return false;
}else {
//已登录
return true;
}
}
}
5、注册拦截器,MyMvcConfig.java,注解@Configuration
重写实现WebMvcConfigurer接口中的 addInterceptors方法,并为该配置类添加@Configuration注解,标注此类为一个配置类,让 Spring Boot扫描到,这里的操作就相当于SpringMVC的注册拦截器,@Configuration就相当于一个applicationContext-mvc.xml
//注册拦截器
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/index.html","/login");
}
完整的MyMvcConfig.java
//@Configuration用于定义配置类,可替换xml文件;定义一个拦截器,相当于之前的mvc里的配置
@Configuration
public class MyMvcConfig extends WebMvcConfigurationSupport {//扩展SpringMVC的功能
//注册视图控制器:页面输入请求打开对应的视图
@Override
protected void addViewControllers(ViewControllerRegistry registry) {
//打开登录页面
//注册.添加视图控制器(url路径)
//含义:发送请求/时,打开login视图
registry.addViewController("/").setViewName("login");
registry.addViewController("/index.html").setViewName("login");
//打开主页面
registry.addViewController("/main.html").setViewName("main");
}
//注册拦截器
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/index.html","/login");
}
}
二、整合mybatis,测试环境
1、导入依赖包:
pom.xml
<!--Thymeleaf模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--MyBatis 整合 SpringBoot 的起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--MySQL 的驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--jdbc 的驱动依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、注意报红问题,解决Maven工程中不识别mybatis的Mapper.xml文件问题
pom.xml
<!--解决Maven工程中不识别mybatis的Mapper.xml文件问题-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
3、在resources目录文件夹下新建mybatis文件夹,新建mybatis配置文件mybatis-config.xml
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置JavaBean别名-->
<typeAliases>
<package name="com.news.domain"/>
</typeAliases>
</configuration>
4、在mybatis目录文件夹下新建mapper文件夹,新建MyBatis映射文件UserMapper.xml
UserMapper.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">
<mapper namespace="com.news.domain.UserMapper">
<!--查询所有用户-->
<select id="getUserList" resultType="user">
select * from user
</select>
<!--验证用户登录:用户和密码-->
<select id="getLoginUser" resultType="user">
select * from user where uname=#{uname} and upwd=#{upwd}
</select>
</mapper>
5、在com.news包下新建domain包,新建user类和UserMapper接口
User.java
//@Repository用于标注数据访问组件,即DAO组件。
@Repository
public class User {
private int uid;
private String uname;
private String upwd;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}
UserMapper.java
//@Mapper 作用:mybatis 自动扫描数据持久层的映射文件及 DAO 接口的关系
@Mapper
public interface UserMapper {
//查询所有用户列表
public List<User> getUserList();
//验证用户登录:用户和密码
public User getLoginUser(@Param("uname")String uname,@Param("upwd") String upwd);
}
6、新建service层,创建UserService接口类,并创建UserServiceImpl类继承UserService接口,并实现方法
UserService.java
public interface UserService {
//查询所有用户列表
public List<User> getUserList();
//验证用户登录:用户和密码
public User getLoginUser(String uname,String upwd);
}
UserServiceImpl.java
//@Service用于标注业务层组件
@Service
public class UserServiceImpl implements UserService {
//@Resource和@Autowired注解都是用来实现依赖注入的
@Resource
UserMapper userMapper;
@Override
public List<User> getUserList() {
return userMapper.getUserList();
}
@Override
public User getLoginUser(String uname, String upwd) {
return userMapper.getLoginUser(uname, upwd);
}
}
7、修改配置文件application.yml
在resources目录文件夹下新建application.yml配置文件
application.yml
spring:
profiles:
active: dev
注意点:
8、修改开发环境配置文件application-dev.yml
#配置端口号
server:
port: 9090
#配置数据库的连接信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/newsdata?serverTimezone=UTC
username: root
password: 123456
#指定了mybatis基础配置文件和实体类映射文件的地址
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
#showSql,配置日志记录
logging:
level:
com:
news:
domain: debug
#在Spring Boot中多环境配置文件名需要满足application-{profile}.yml的格式,其中{profile}对应你的环境标识,比如:
#application-dev.yml:开发环境
#application-test.yml:测试环境
#application-prod.yml:生产环境
#至于哪个具体的配置文件会被加载,需要在application.yml文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
9、UserController.java类创建getUser方法,测试配置环境
UserController.java
//@RestController替代 @Controller + @ResponseBody
//@Controller用于标注控制层组件
@Controller
public class UserController {
@Resource
UserService userService;
//@ResponseBody的作用其实是将java对象转为json格式的数据
@ResponseBody
@GetMapping("/getUser")
public User getUser(String uname, String upwd){
User user=null;
user=userService.getLoginUser(uname, upwd);
return user;
}
}
10、最后启动,浏览器输入地址:http://localhost:9090/news/getUser?uname=admin&&upwd=admin
测试运行结果:
之前在application-dev.yml文件里配置日志记录
#showSql,配置日志记录
logging:
level:
com:
news:
domain: debug
显示日志记录结果:
三、SpringBoot配置druid数据源
参看文档:
https://www.cnblogs.com/SimpleWu/p/10049825.html
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
关于springboot 的默认数据源:https://blog.csdn.net/qq78827534/article/details/81143933
正确理解RestFul 接口 :https://www.cnblogs.com/ecs-console/p/13324085.html
1、SpringBoot配置druid数据源,引入druid-spring-boot-starter依赖
<!--SpringBoot配置druid数据源-->
<!--在 Spring Boot 项目中加入druid-spring-boot-starter依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
2、在配置application-dev.yml文件新增以下代码:
# 数据源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
3、在config文件夹下创建Druid的配置文件,DruidConfig.java
//创建Druid的配置文件
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DruidDataSource druidDataSource(){
return new DruidDataSource();
}
/**
* 配置监控服务器
* @return 返回监控注册的servlet对象
*/
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 添加IP白名单
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
servletRegistrationBean.addInitParameter("deny", "127.0.0.1");
// 添加控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
// 是否能够重置数据
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
/**
* 配置服务过滤器
*
* @return 返回过滤器配置对象
*/
/*@Bean
public FilterRegistrationBean statFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
// 添加过滤规则
filterRegistrationBean.addUrlPatterns("/*");
// 忽略过滤格式
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");
return filterRegistrationBean;
}*/
}
测试结果:
http://localhost:9090/news/druid/login.html
用户:admin
密码:123456
用户密码可以在DruidConfig.java文件里修改
登录成功:进入index主页
浏览器输入:http://localhost:9090/news/getUser?uname=admin&&upwd=admin
四、用户列表:
1、获取所有的用户列表
UserController.java
@Controller
public class UserController {
//@Resource和@Autowired注解都是用来实现依赖注入的
@Resource
UserService userService;
//获取所有的用户列表
@GetMapping("/users")
public String getUsers(Model model) {
//调用业务逻辑层获取所有的用户列表
List<User> userList = userService.getUserList();
model.addAttribute("userList", userList);
return "userList";
}
}
2、增加用户列表userList.html
userList.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h2>用户列表</h2>
<table>
<tr>
<th>用户Id</th>
<th>用户名</th>
<th>密码</th>
</tr>
<tr th:each="user:${userList}">
<td th:text="${user.uid}"></td>
<td th:text="${user.uname}"></td>
<td th:text="${user.upwd}"></td>
<td>
<a>修改</a>
<a>删除</a>
</td>
</tr>
</table>
</body>
</html>
3、在main.html的页面中,添加定义超链接,主要结合 URL表达式 ,获取动态变量
main.html
<li><a th:href="@{/user}">用户管理</a></li>
完整的main.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h2>欢迎你,[[${session.user.uname}]]</h2>
<ul>
<li><a th:href="@{/user}">用户管理</a></li>
<li>新闻管理</li>
<li>主题管理</li>
</ul>
</body>
</html>
4、测试运行
测试地址:http://localhost:9090/news/main.html
测试地址:http://localhost:9090/news/user
五、错误处理405
1、SpringBoot如何使用PUT、DELETE请求方式 :
SpringBoot 2.2.X默认不支持put,delete等请求方式的。
在配置文件application.properties添加以下代码:
spring.mvc.hiddenmethod.filter.enabled=true
然后在form标签里面声明method为post
最后在form里面使用以下标签
<input th:type="hidden" name="_method" value="put">
name必须为“_method”,value值就是你想使用的请求方式,put或者delete等。
参看链接:https://www.cnblogs.com/lbhym/p/12089549.html
2、奇怪的Request method ‘POST’ not supported 405错误
参考文档:https://blog.csdn.net/Lswx2006/article/details/89341278?spm=1001.2014.3001.5501
错误信息
Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'POST' not supported.
将MyMvcConfig 修改为实现WebMvcConfigurer
代码如下:
//@Configuration用于定义配置类,可替换xml文件;定义一个拦截器,相当于之前的mvc里的配置
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//注册视图控制器:页面输入请求打开对应的视图
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//打开登录页面
//注册.添加视图控制器(url路径)
//含义:发送请求/时,打开login视图
registry.addViewController("/").setViewName("login");
registry.addViewController("/index.html").setViewName("login");
//打开主页面
registry.addViewController("/main.html").setViewName("main");
registry.addViewController("/adduser.html").setViewName("adduser");
}
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/index.html","/login");
}
}
六、添加、修改、删除用户操作:
1、在UserMapper.java增加添加、修改、删除用户代码
//添加用户
public int addUser(User user);
//修改用户
public int modifyUser(User user);
//删除指定id的用户
public int deleteUserByUid(Integer uid);
2、编写UserMapper.xml添加SQL语句
<!--添加用户-->
<insert id="addUser" parameterType="User">
insert into user(uname,upwd) values(#{uname,jdbcType=VARCHAR},#{upwd,jdbcType=VARCHAR})
</insert>
<!--修改用户-->
<update id="modifyUser" parameterType="User">
update user set uname=#{uname},upwd=#{upwd} where uid=#{uid}
</update>
<!--根据id删除用户-->
<delete id="deleteUserByUid" parameterType="int">
delete from user where uid=#{uid}
</delete>
3、在UserService.java里添加方法
//添加用户
public int addUser(User user);
//修改用户
public int modifyUser(User user);
//删除指定id的用户
public int deleteUserByUid(Integer uid);
4、在UserServiceImpl.java实现添加、修改、删除用户方法
@Override
public int addUser(User user) {
return userMapper.addUser(user);
}
@Override
public int modifyUser(User user) {
return userMapper.modifyUser(user);
}
@Override
public int deleteUserByUid(Integer uid) {
return userMapper.deleteUserByUid(uid);
}
七、修改用户:
1、在UserController.java添加修改用户的代码:
UserController.java
//打开修改页面,查询当前要修改的用户(uid),在页面进行回显
@GetMapping("/user/{uid}")
public String toModifyUser(@PathVariable("uid")Integer uid,Model model){
//调用业务逻辑层根据uid查询用户
User user=userService.getUserByUid(uid);
//保存到model对象中
model.addAttribute("user", user);
return "modifyuser";
}
//修改用户
@PutMapping("/user")
public String modifyUser(User user) {
userService.modifyUser(user);
return "redirect:/users";
}
2、用户修改modifyuser.html页面
modifyuser.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户修改</title>
</head>
<body>
<h2>用户修改</h2>
<form th:action="@{/user}" method="post">
<input th:type="hidden" name="_method" value="PUT" th:if="${user!=null}">
<input type="hidden" name="uid" th:value="${user.uid}">
用户名:<input type="text" name="uname" th:value="${user.uname}">
密码:<input type="password" name="upwd" th:value="${user.upwd}">
<input type="submit" value="修改">
</form>
</body>
</html>
3、在userList.html页面中添加定义超链接,主要结合 URL表达式 ,获取动态变量
userList.html
<a th:href="@{/user/}+${user.uid}">修改</a>
完整的userList.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h2>用户列表</h2>
<table border="1"><!--边框-->
<tr>
<th>用户Id</th>
<th>用户名</th>
<th>密码</th>
</tr>
<tr th:each="user:${userList}">
<td th:text="${user.uid}"></td>
<td th:text="${user.uname}"></td>
<td th:text="${user.upwd}"></td>
<td>
<a th:href="@{/user/}+${user.uid}">修改</a>
<a>删除</a>
</td>
</tr>
</table>
</body>
</html>
4、测试运行
测试地址:http://localhost:9090/news/user
八、添加用户:
1、在UserController.java增加添加用户的代码:
UserController.java
//打开添加页面
@GetMapping("/user")
public String toAddUser(){
return "adduser";
}
//添加新用户
@PostMapping("/user")
public String toAddUser(User user) {
userService.addUser(user);
return "redirect:/users";
}
2、用户增加adduser.html添加用户页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
<h2>添加用户</h2>
<form th:action="@{/user}" method="post">
<!--<input th:type="hidden" name="_method" value="POST">-->
用户名:<input type="text" name="uname">
密码:<input type="password" name="upwd">
<input type="submit" value="添加">
</form>
</body>
</html>
3、在userList.html页面中添加定义超链接,主要结合 URL表达式 ,获取动态变量
<a th:href="@{/user}">添加用户</a>
完整的userList.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h2>用户列表</h2>
<a th:href="@{/user}">添加用户</a>
<table border="1"><!--边框-->
<tr>
<th>用户Id</th>
<th>用户名</th>
<th>密码</th>
</tr>
<tr th:each="user:${userList}">
<td th:text="${user.uid}"></td>
<td th:text="${user.uname}"></td>
<td th:text="${user.upwd}"></td>
<td>
<a th:href="@{/user/}+${user.uid}">修改</a>
</td>
<td>
<!--<a th:href="@{/user/}+${user.uid}">删除</a>-->
<form th:action="@{/user/}+${user.uid}" method="post">
<input th:type="hidden" name="_method" value="DELETE">
<input type="submit" value="删除">
</form>
</td>
</tr>
</table>
</body>
</html>
4、测试运行
测试地址:http://localhost:9090/news/user
九、删除用户:
1、在UserController.java增加删除用户的代码:
UserController.java
//根据用户(uid),删除用户
@DeleteMapping("/user/{uid}")
public String deleteUser(@PathVariable("uid") Integer uid){
userService.deleteUserByUid(uid);
return "redirect:/users";
}
2、在userList.html页面中添加删除用户按钮
<td>
<!--<a th:href="@{/user/}+${user.uid}">删除</a>-->
<form th:action="@{/user/}+${user.uid}" method="post">
<input th:type="hidden" name="_method" value="DELETE">
<input type="submit" value="删除">
</form>
</td>
3、测试运行
测试地址:http://localhost:9090/news/users
十、删除用户-加强版:
1、引入jquery文件:两种方式
1.1引入jquery文件方式(一),直接官网下载jquery文件
引入jQuery文件方式:
<!--引入jQuery文件-->
<!--<script type="text/javascript" th:src="@{/js/jquery-3.0.0.js}"></script>-->
1.2引入jquery文件方式(二)
官网:https://www.webjars.org/
导入jQuerywebjars依赖包:
<!--导入jQuerywebjars-->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
引入jQuery文件方式:
<!--引入jQuery文件-->
<script type="text/javascript" th:src="@{/webjars/jquery/3.3.1/jquery.js}"></script>
2、修改userlist.html文件:
原来的删除操作:
<td>
<!--<a th:href="@{/user/}+${user.uid}">删除</a>-->
<form th:action="@{/user/}+${user.uid}" method="post">
<input th:type="hidden" name="_method" value="DELETE">
<input type="submit" value="删除">
</form>
</td>
修改后的删除操作:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h2>用户列表</h2>
<a th:href="@{/user}">添加用户</a>
<table border="1"><!--边框-->
<tr>
<th>用户Id</th>
<th>用户名</th>
<th>密码</th>
<th colspan="2">删除</th>
</tr>
<tr th:each="user:${userList}">
<td th:text="${user.uid}"></td>
<td th:text="${user.uname}"></td>
<td th:text="${user.upwd}"></td>
<td>
<a th:href="@{/user/}+${user.uid}">修改</a>
</td>
<td>
<a href="javascript:void(0)" th:attr="delete_url=@{/user/}+${user.uid}" class="delete">删除</a>
</td>
</tr>
</table>
<form id="deleteUserForm" method="post">
<input th:type="hidden" name="_method" value="DELETE">
</form>
<!--引入jQuery文件-->
<!--<script type="text/javascript" th:src="@{/js/jquery-3.0.0.js}"></script>-->
<script type="text/javascript" th:src="@{/webjars/jquery/3.3.1/jquery.js}"></script>
<script>
//为所有的删除链接添加点击事件
$(".delete").click(function () {
//获取超链接的自定义属性delete_url
var delete_url=$(this).attr("delete_url");
//把表单的action属性设置为delete_url
//表单提交
$("#deleteUserForm").attr("action",delete_url).submit();
//阻止原来的点击事件
return false;
});
</script>
</body>
</html>
ASCII艺术字(图)集:https://www.bootschool.net/ascii-art
学习链接:
restful 架构风格的curd(增删改查)POST、GET、PUT、DELETE请求实例 :https://www.cnblogs.com/duguangming/p/11047839.html
https://blog.csdn.net/dll175/article/details/107332374/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242