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

目录

知识点: 路由重定向 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.rhkb.cn/news/288234.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商标跨类异议与跨类保护!

有个朋友对普推知产老杨说收到某邮件&#xff0c;名下商标让某公司抢注了现在公告期&#xff0c;让赶紧提出来异议去处理下&#xff0c;怎么会有这样的事&#xff0c;相同的名称基本上在同类别相关产品是无法公告和获得初审的。 经详细检索分析后&#xff0c;发现不是这样一回…

利用瑞士军刀netcat建立连接并实现文件上传

实验环境&#xff1a; Kali:192.168.117.129 Windows10:192.168.135.142 第一步&#xff1a;建立连接 在Windows上下载netcat(官网搜索) 下载好之后在netcat目录打开cmd进入小黑屏 实验一&#xff1a;建立虚拟机与主机的连接 命令&#xff1a; Kali:nc 192.168.135.144…

学习总结!

java目前学习到了类的实例化&#xff1a; 类&#xff1a;描述一种事物的定义&#xff0c;是抽象的概念 实例&#xff1a;该事物的一个具体的个体&#xff0c;是具体的东西 举例&#xff1a; 世界上人很多&#xff0c;可以定义一个Person类: Public Person {Public String Name…

全国草地资源类型分布图

草地出现在世界各地&#xff0c;约占全球陆地面积的24%&#xff0c;大多分布于大陆内部气候干燥、降水较少的地区&#xff0c;其中澳大利亚、俄罗斯、中国、美国和巴西等国面积较大。中国草地面积约占国土面积的40%&#xff0c;主要分布在内蒙古、东北、西北和青藏高原&#xf…

基于javaweb(springboot+mybatis)网上家具商城项目设计和实现以及文档报告

基于javaweb(springbootmybatis)网上家具商城项目设计和实现以及文档报告 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞…

创建AI智能体

前言 灵境矩阵是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&#xff0c;打造大模型时代的产品能力。开发者可以通过 prompt 编排的方式低成本开发智能体&am…

【STL】string的模拟实现

目录 前言 构造函数 析构函数 迭代器 拷贝构造和赋值 深浅拷贝问题 传统写法 现代写法 插入函数 reserve() push_back() append() 操作 insert() erase() 流插入和流提取 流插入 流提取 运算符重载 其它函数实现 []重载 resize() find() substr() …

Matlab|计及电池储能寿命损耗的微电网经济调度

目录 1 主要内容 储能寿命模型 负荷需求响应 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型&#xff0c;以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数&#xff0c;创新考虑储能寿命损耗约…

基于 YAML 接口自动化测试框架设计

在设计自动化测试框架的时候&#xff0c;我们会经常将测试数据保存在外部的文件&#xff08;如Excel、YAML、CSV&#xff09;&#xff0c;或者数据库中&#xff0c;实现脚本与数据解耦&#xff0c;方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测…

python 中判断文件、目录是否存在的方法

判断目录是否存在并创建目录 一、实现上传文件功能二、判断目录是否存在的办法2.1、使用os模块2.1.1、判断目录是否存在2.1.2、os.makedirs()&#xff1a;递归创建目录 2.2、使用pathlib模块2.2.1、path.exist()判断目录是否存在2.2.1、path.mkdir()&#xff1a;创建目录 2.3、…

力扣刷题Days25-45. 跳跃游戏 II(js)

目录 1&#xff0c;题目 2&#xff0c;代码 贪心算法正向查找 3&#xff0c;学习 解题思路 具体代码处理 数组遍历的最后边界的处理&#xff1a; 1&#xff0c;题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向…

程序结构

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 程序结构 PL/SQL程序的基本单元是语句块&#xff0c;所有的 PL/SQL程序都是由语句块组成&#xff0c;语句块之间可以相互嵌套&#xff0c;每个语句块完成特定的功能。 一个…

html页面使用@for(){},@if(){},利用jquery 获取当前class在列表中的下标

基于以前的项目进行修改优化&#xff0c;前端代码根据List元素在html里进行遍历显示 原先的代码&#xff1a; 其中&#xff0c;noticeGuide.Id是标识noticeGuide的唯一值&#xff0c;但是不是从0开始的【是数据库自增字段】 但是在页面初始化加载的时候&#xff0c;我们只想…

NO9 蓝桥杯单片机实践之串口通信的使用

1 回顾 串口通信的代码编写结构还是与中断一样&#xff0c;不同的是&#xff1a; 初始中断函数条件涉及到串口通信相关的寄存器和定时器1相关的寄存器&#xff08;定时器1用于产生波特率&#xff09;&#xff0c;但初始条件中的中断寄存器只考虑串口通信而不考虑定时器1。 vo…

基于SSM的高校推免报名(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的高校推免报名&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

图解 python 的赋值,浅拷贝,深拷贝

上面的图中&#xff0c;我们将箭头连线看作是引用。 如果你只是简单是 b a&#xff0c;实际上两者的引用是一样的&#xff0c;相当于 b 只是 a 的另外一个名字&#xff0c;不管是对 a 或者 b 内的可变元素还是不可变元素修改&#xff0c;打印 a, b 两者都是一样的。 但是如果…

PHP+MySQL开发组合:智慧同城便民信息小程序源码系统 带完整的安装代码包以及安装部署教程

当前&#xff0c;城市生活的节奏日益加快&#xff0c;人们对各类便民信息的需求也愈发迫切。无论是寻找家政服务、二手交易&#xff0c;还是发布租房、求职信息&#xff0c;一个高效、便捷的信息平台显得尤为重要。传统的信息发布方式往往存在信息更新不及时、查找困难等问题&a…

Jenkins安装 Linux 更换镜像 安装插件

Jenkins安装 Linux 更换镜像 安装插件 前言 下面叙述了三种jenkins安装的方式,jenkins安装之前必须有java环境因为他是java写的… yum安装只能安装最新版本的jenkins,但是jenkins是java写的所以他强依赖java版本,当你的服务器的java版本与jenkins版本冲突时还需要给jenkins重…

攻防世界misc_pic_again

是个png文件 你用binwalk &#xff0c;010&#xff0c;和图片分离都没有什么信息 正确做法—————— 在StegSolve里面 点Ana——Exrtact 选上这三个&#xff0c;你就可以发现 这个二进制是个zip &#xff08;具体原理我不知道&#xff0c;只能说这是新题型&#xff0c…

书生浦语大模型实战营第一课笔记

书生浦语大模型全链路开源体系 课程笔记大模型的发展趋势InternLM2的主要亮点模型到应用的典型流程全链路的开源工具 InternLM2技术报告笔记大型语言模型的发展InternEvoModel Structure训练数据 课程笔记 第一节课主要对大模型进行介绍&#xff0c;特别是书生浦语大模型的发展…