springBoot整合mybatis01

springBoot整合mybatis01

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

良辰美景好时光

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

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

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

打赏作者

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

抵扣说明:

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

余额充值