Spring+thymeleaf完成用户管理页面的增删查改功能

news/2024/5/20 11:02:27

目录

知识点: 路由重定向 redirect:/***

登录

控制层代码

接口

sql配置

页面效果

添加用户

控制层代码

接口

sql配置

页面效果

查看信息

控制层代码

接口

sql配置

页面效果

修改信息

控制层代码

接口

sql配置

页面效果

条件查询

控制层代码

接口

sql配置

页面效果

删除数据

控制层代码

接口

sql配置

页面效果


知识点: 路由重定向 redirect:/***

使得一个路由地址A与另一个路由地址B联系起来,执行A的时候会跳转执行B 。不仅 “/” 可以被重定向,其他普通路由地址互相也可以重定向。重定向会使得路由再次发生调用请求。

登录

输入用户名和密码,根据用户名和密码查询,如果查到,则登录成功。

控制层代码

/*** 登录 判断用户名和密码是否正确*/@RequestMapping("/index")public ModelAndView goindex(User user) {System.out.println(user);System.out.println(user.getUsername() + "  " + user.getPassword());User login = userService.getUser(user);if (login != null) {mav.addObject("name", user.getUsername());mav.setViewName("index");} else {mav.addObject("error", "用户名和密码错误");mav.setViewName("login");}return mav;}

接口

   

//登录public User getUser(User user);

sql配置

 <!--登录 根据用户名和密码查询--><select id="getUser" resultType="User">select *from userwhere username = #{username}and password = #{password}</select>

页面效果

登录页面

用户名密码错误时

用户名密码正确时

添加用户

点击添加用户,进入添加用户页面,表单输入完成后提交,添加表单内容到数据库

控制层代码

   

/*** 新建用户* @param user* @return*/@RequestMapping("/userAdd")public Object goUserAdd(User user) {System.out.println("5555555555555555555555555"+user);if(user.getUsername()!=null){userService.insert(user);return "redirect:/userList";}else {mav.setViewName("userAdd");return mav;}}

接口

   /*** 新增数据** @param user 实例对象* @return 影响行数*/public Integer insert(User user);

sql配置

 <!--新增--><insert id="insert">insert into user values (0,#{username}, #{password}, #{gender}, #{age}, #{phone}, #{type})</insert>

页面效果

查看信息

点击查看,根据id查询到信息,显示在页面上

控制层代码

 /*** 查看数据** @return*/@RequestMapping("/userView/{id}")public ModelAndView goUserView(@PathVariable("id") Integer id) {User user = userService.queryById(id);System.out.println(user);mav.addObject("item", user);mav.setViewName("userView");return mav;}

接口

 /*** 通过ID查询单条数据** @param userid 主键* @return 实例对象*/public User queryById(Integer userid);

sql配置

   

  <select id="queryById" resultType="User">select *from userwhere userid = #{userid}</select>

页面效果

修改信息

将原本信息显示在页面上,在输入框输入修改后信息,提交表单,更新数据库数据。

控制层代码

/*** 修改数据* 点击修改时:首先取缓存中数据和该行数据对比,一致则能修改,不一致则不允许修改。* @return*/@RequestMapping("/userUpdate/{id}")public Object goUserUpdate(@PathVariable("id") Integer id, User user) {
//        先查看  修改前User user1 = userService.queryById(id);mav.addObject("former", user1);mav.setViewName("userUpdate");
//       再获取表单数据System.out.println("goUserUpdate" + user);if (user.getUsername() != null) {user.setUserid(user1.getUserid());userService.update(user);return "redirect:/userList";}return mav;}

接口

/*** 修改数据** @param user* @return*/public Integer update(User user);

sql配置

<!--通过主键修改数据--><update id="update">update user<set><if test="username != null and username != ''">username = #{username},</if><if test="password != null and password != ''">password = #{password},</if><if test="gender != null and gender != ''">gender = #{gender},</if><if test="age != null">age = #{age},</if><if test="phone != null and phone != ''">phone = #{phone},</if><if test="type != null and type != ''">type = #{type},</if></set>where userid = #{userid}</update>

页面效果

条件查询

根据输入条件,点击查询后页面显示数据。如果未输入,则显示所有,进入页面则显示所有

控制层代码

/*** 页面显示列表** @return*/@RequestMapping("/userList")public ModelAndView goUserList(User user) {System.out.println(user);List<User> users = userService.UserList(user.getUsername());
//        存缓存redisTemplate.opsForValue().set("users", users);List<User> userList = (List<User>) redisTemplate.opsForValue().get("users");
//        存页面mav.addObject("users", userList);mav.setViewName("userList");return mav;}

接口

 //显示列表public List<User> UserList(String username);

sql配置

  <!--显示列表--><select id="UserList" resultType="User">select *from user<where><if test="username!=null and username!=''">username like '%${username}%'</if></where></select>

页面效果

输入条件

点击查询后

再次点击

删除数据

点击删除按钮,删除此条数据。

控制层代码

 /*** 删除数据** @param userid 主键* @return 删除是否成功*/@RequestMapping("/userdelet/{id}")public String userdelet(@PathVariable("id") Integer userid) {userService.deleteById(userid);return "redirect:/userList";}

接口

 /*** 通过主键删除数据** @param userid 主键* @return 影响行数*/public Integer deleteById(Integer userid);

sql配置

<!--通过主键删除--><delete id="deleteById">deletefrom userwhere userid = #{userid}</delete>

页面效果

删除小绿后:


http://www.mrgr.cn/p/58465033

相关文章

PHP页面如何实现设置独立访问密码

PHP网页如果需要查看信息必须输入密码&#xff0c;验证后才可显示出内容的代码如何实现&#xff1f; 对某些php页面设置单独的访问密码,如果密码不正确则无法查看内容,相当于对页面进行了一个加密。 如何实现这个效果&#xff0c;详细教程可以参考&#xff1a;PHP页面如何实现…

[flask] flask的基本介绍、flask快速搭建项目并运行

笔记 Flask Flask 本身相当于一个内核&#xff0c;其他几乎所有的功能都要用到扩展&#xff08;邮件扩展Flask-Mail&#xff0c;用户认证Flask-Login&#xff0c;数据库Flask-SQLAlchemy&#xff09;&#xff0c;都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、…

xilinx的高速接口构成原理和连接结构

本文来源&#xff1a; V3学院 尤老师的培训班笔记【高速收发器】xilinx高速收发器学习记录Xilinx-7Series-FPGA高速收发器使用学习—概述与参考时钟GT Transceiver的总体架构梳理 文章目录 一、概述&#xff1a;二、高速收发器结构&#xff1a;2.1 QUAD2.1.1 时钟2.1.2 CHANNEL…

如何解决Modbus转Profinet网关通信不稳定或数据丢失问题

在配置Modbus转Profinet网关时,出现Modbus转Profinet网关(XD-MDPN100)通信不稳定或数据丢失的问题,就这个问题特做出答疑。解决Modbus转Profinet网关(XD-MDPN100)通信不稳定或数据丢失的问题可以从以下几个方面着手:检查物理连接与接口,配置与调整网关参数,检查并隔离…

集合:Arrays.asList() 和 new ArraysList()

Arrays.asList 和 new ArrayList 在 Java 中都与集合有关,但是它们之间有一些重要的区别。 概述1) Arrays.asList():T... 是一个可变参数(varargs),接收任意参数后,会组合为一个数组。Arrays.asList("字符串列表."); // 字符串列表Arrays.asList(2024); …

5-3损失函数

损失函数。一般来说,监督学习的目标函数由损失函数和正则化项组成。(Objective = Loss + Regularization) Pytorch中的损失函数一般在训练模型时候指定。 注意Pytorch中内置的损失函数的参数和tensorflow不同,是y_pred在前,y_true在后,而Tensorflow是y_true在前,y_pred在后…

【OpenCV C++Python】(五)图像平滑(模糊)

文章目录 图像平滑均值滤波高斯滤波中值滤波双边滤波(Bilateral Filtering ) PythonC 图像线性平滑空间滤波&#xff08;加权均值滤波器&#xff0c;几何均值滤波&#xff0c;谐波均值滤波&#xff0c;逆谐波均值滤波&#xff09;&#xff0c;非线性平滑空间滤波&#xff08;中…

HeidiSQL导出SQL文件

目前开发阶段的数据库可视化工具逐渐转为了HeidiSQL&#xff0c;本文讲一讲导出到sql文件的小细节&#xff0c;给自己做个记录补充。 安装或数据库可视化工具比较可参考&#xff1a; windows下全免费手动搭建php8mysql8开发环境及可视化工具安装 导出 原来用Navicat的时候&am…

YOLO-v8-seg实例分割使用

最近需要实例分割完成一些任务&#xff0c;一直用的SAM(segment anything&#xff09;速度慢&#xff0c;找一个轻量分割模型。 1. YOLO-v8-seg使用 git clone https://github.com/ultralytics/ultralytics.git cd ultralytics vim run.py from ultralytics import YOLO# L…

vscode c++环境配置

1.基础软件安装 安装Visual Studio Code. 安装C拓展。点击在vscode界面最左侧的Extensions图标&#xff08;打开快捷键&#xff1a;ctrlshiftX&#xff09;&#xff0c;搜索“C/C”&#xff0c;点击进行安装。 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下…

P5470 [NOI2019]序列 题解

P5470:NOI2019 序列题意:给定两个长度 \(n\) 的序列 \(a,b\)。 要求各选出 \(k\) 个数,使得这 \(2k\) 个数之和最大,且两个序列选出的数至少有 \(l\) 个位置相同。 \(n\le 2\times 10^5\)。command_block 的题解 但是这个貌似有一些小问题,后文有写。 算法:模拟费用流。 …

docker-运行tomcat服务

环境说明 linux系统版本:lsb_release -adocker 版本: docker -v 不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。.1.tomcat镜像版本选择。 进入docker官网搜索 8-jdk8自己选择的版本如下docker pull tomcat:8-jdk8可以正确拉取。 .2.启动tomcat 服…

camera基础知识二

Camera sensor block: 以0V13b10为例:ADC:转换成数字信号 ISP:一般sensor内部的isp处理很有限,会选择外部的isp image interface:MIPITX,转换成mipi载波信号发出去 PLL:外部晶振或者平台端提供时钟,sensor内部做分屏 timing Logical:reset、fsync等 control register…

统一结果封装

Result{code;data;msg}1、Result一般来说,增删改返回boolean,查询返回对象或集合,还有其他类型的返回数据,前段解析数据比较麻烦,需要返回一个统一的数据结果统一数据返回结果类:data:封装数据(各种类型的,例如boolean、null、json等) code:封装操作类型与是否成功,可…

git 上传文件夹至远端仓库的方法

上传的远端git可以是gitlab、github、gitee、gitblit或者gitCode等等 以下以GitHub为例说明&#xff1a; 1、登录GitHub网站&#xff08;账户/密码&#xff09; 2、创建一个新的空白项目&#xff08;或者已有的项目&#xff09;hello-world 分支是master &#xff0c;这里默认即…

小目标检测篇 | YOLOv8改进之GSConv + Slim Neck提升小目标检测效果

前言:Hello大家好,我是小哥谈。在文章中,作者提出了一种新方法GSConv来减轻模型的复杂度并保持准确性。GSConv可以更好地平衡模型的准确性和速度。并且,提供了一种设计范式Slim Neck,以实现检测器更高的计算成本效益。实验过程中,与原始网络相比,改进方法获得了最优秀的…

LCD - 液晶显示原理(一)

1. 显示器介绍 ​ 显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有CRT显示器、液晶显示器、 LED点阵显示器及OLED显示器。液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显…

分布式ID生成方案总结

分布式场景下&#xff0c;需要保证每一个服务拿到的id是唯一的。本文讨论、分析、总结了一些常见的分布式ID生成方案 结论&#xff1a;技术上没有银弹&#xff0c;每种分布式id都有自己的使用场景。uuid适用于业务比较简单&#xff0c;对性能没有太高追求等。 目前主流是 基于数…

HCIP—BGP路由发布

R1和R2&#xff0c;R4和R5建立EBGP对等体 R1和R2&#xff08;R4和R5&#xff09;之间属于EBGP对等体&#xff0c;可以使用直连物理接口建立对等体关系&#xff0c;TTL值默认1。由于使用直连物理接口方式建立&#xff0c;刚好一跳到达。 [R1]bgp 100 [R1-bgp]router-i…

RestFul风格的开发

Representational State Transfer;get查询,post新增,put更新,delete删除1、REST风格根据REST风格对资源进行访问称为restful 描述模块通常使用复数表示某类资源每个控制器方法前都有这两个注解:@RequestMapping(value = "/users/{id}/{name}",method = RequestM…