云监控(华为) | 实训学习day3(10)
实现数据的增删改查
SpringBoot框架模式
向送外卖一样理解

写程序
1、准备食材(java bean)
2、菜谱(pojo接口->预制->sql 语句)
3、service处理
4、controller 派送
5、用户请求->页面
一、Spring Boot实现增加
第一步:食材(表),用户增加,这里还是用户表,这是MyUseràbean
第二步:pojo里增加(添加的方法,)预制菜---Mapper
先写一个接口:

第三步:解冻(接口执行的sql语句)

为xml的增加insert语句

注意:
- mapper的java接口名与xml 的文件名必须一致
- mapper接口增加的方法在xml中必须有一个id对应
- 注意返回值和参数值,如果接口中有返回值,xml有resultType,如果有接口有参数值,xml中有parameterType
- mapper标签的namespace必须指示到对应的mapper接口类中。
- 执行增删改操作必须有参数,参数类型指示的是bean中的类型,在模板#{}使用bean中类属性就可以。
resultType(有返回值的)

parameterType(没有返回值,参数的)

第四步:service的编写,基本程序Service与Mapper代码相似,直接调用

第五步: Controller编写
Controller写路由(地址)

第六步:前端页面
必须输入添加的数据,用户交互没有添加功能,添加功能就是用户输入用户名和密码,这个功能只与Controller有关系,与数据库无关。这里增加一个显示页面的方法

有了地址后,添加addpage页面

用户不能输入id,只能输入username,password
修改sql的代码如下.

最后得到前端的页面代码

注意:
前端页面代码中的input属性必须有name属性,不然后端接收不到,并且名称与java bean的名称一致。

清楚访问地址
http://localhost:8080/user/addpage
提交后:添加到数据库的用户列表页

注册后,得到用户列表页

二、用户表的删除
1、准备食材(java bean)
2、菜谱(pojo接口->预->sql 语句)
3、service处理
4、controller 派送
5、用户请求->页面
第一步:表:用户表,MyUser
第二步:实现接口 UserMapper

第三步:改UserMapper对应的xml,写sql语句

第四步: Service代码和Mapper代码,Service代码写实现

第五步,controller调用service方法即可

在逻辑中,删除结束后返回原来的用户列表页.
第六步,前端页面的处理
常识:
一般删除发生在用户列表页,删除某项就击“删除”键

前端页面首先在列表中有删除按钮
得到的页面

删除之前需要确认,确认后删除,需要前端做确认代码。
得到前端代码.

三 、用户表的更新
第一步:分析操作的java bean,还是MyUser,更新的还是用户表
第二步: 解决Mapper问题
在Mapper中加入更新方法

第三步: 同步 解决Mapper的xml文件

第四步: Service, 与Mapper一致,这里的Service是需要实现

第五步: Controller, 调用Service方法,返回一个页面

第六 步: 前端
界面,用户操作明白
修改逻辑一般

在前端击修改后先把原始数据放在页面中显示,然后根据需求去
改。
先把修改按钮放在页面上

需求中出现原始数据的显示地址,地址是Controller的事情.

到Controller后,发现还需要显示需要修改的原始数据。
这里需要调用Service的逻辑, Service就调用Mapper,Mapper 实现sql语句,Mapper功能按 修改的id找原始数据.
决定Mapper中多加一人方法

Mapper文件发生改变,Mapper的xml发生改变

完成Mapper,写Service,Service逻辑与Mapper类似,需要代码实现。

完成Serivce后,就可以写Controller调用

最后是前端,需要创建一个updatepage的页面

最后调整用户列表页

注释:
上面页面widow.location.href少一个h

效果如下
更新页面

代码详解:
addpage.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head><meta charset="UTF-8"><title>添加用户</title>
</head>
<body>
<!--action 是提交地址,决定有哪个逻辑来进行处理-->
<!--用户是不可以输入id的,所以修改xml-->
<form action="/user/add" method="post">用户名:<input type="text" name="username"/></br>密码:<input type="password" name="password"/></br><button type="submit">注册</button></form>
</body>
</html>
myuser.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>显示用户</title>
</head>
<body>
<table><tr><td>id</td><td>用户名</td><td>用户密码</td><td>操作</td></tr><tr th:each="item:${myusers}"><td th:text="${item.id}"></td><td th:text="${item.username}"></td><td th:text="${item.password}"></td><td><button type="button" th:onclick="|ondel(${item.id})|" >删除</button><button type="button" th:onclick="|onupdate(${item.id})|">修改</button></td></tr>
</table>
<script>function onupdate(id){//修改不需要跳转,显示原始信息window.location.href="/user/orign?id="+id;}function ondel(id){//先确认是否删除answer=confirm("是否需要执行删除操作?")if(answer==true){// 地址栏地址window.location.href="/user/del?id="+id;}}
</script></body>
</html>
updatepage.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" >
<head><meta charset="UTF-8"><title>更新页面</title>
</head>
<body>
<form action="/user/update" method="post"><input type="hidden" th:value="${oneuser.id}" name="id"/>用户名:<input type="text" th:value="${oneuser.username}" name="username"/><br/>密码:<input type="password" th:value="${oneuser.password}" name="password" /><br/><button type="submit">更新</button>
</form>
</body>
</html>
controller>UserController
package com.controller;import com.bean.MyUser;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.ArrayList;
import java.util.List;@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userservice;@RequestMapping("/list")public String ListUser(Model model) {List<MyUser> users = userservice.selectUser();System.out.println("users");model.addAttribute("myusers", users);return "myuser";}//指定地址添加requstmapping,方法最终返回页面,需要字符串,代表页面名称//处理用户的添加,参数还需要用户输入@RequestMapping("/add")public String addUser(MyUser user){userservice.addUser(user);//把数据添加成功之后,需要查看数据是否添加成功,返回查看页面,返回到list显示的页面//list地址逻辑已完成,没有必要再写return "forward:/user/list";}//给用户输入数据的页面,再给一个请求地址,专门显示页面的,与数据库无关@RequestMapping("/addpage")public String addpage(){return "addpage";}// 删除方法的路由@RequestMapping("/del")public String deleteUser(int id){userservice.deleteUser(id);
// 操作后返回查询页面return "forward:/user/list";}//修改用户表的路由@RequestMapping("/update")public String updateUser(MyUser user){userservice.updateUser(user);return "forward:/user/list";}@RequestMapping("/orign")public String showUser(int id,Model model) {MyUser myuser = userservice.selectUserById(id);model.addAttribute("oneuser",myuser);return "updatepage";}}
pojo>UserMapper
package com.pojo;import com.bean.MyUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;@Mapper
public interface UserMapper {public List<MyUser> selectUser();public void addUser(MyUser user);public void deleteUser(int id);public void updateUser(MyUser user);public MyUser selectUserById(int id);
}
service>userservice
package com.service;import com.bean.MyUser;
import com.pojo.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper usermapper;public List<MyUser> selectUser(){return usermapper.selectUser();}public void addUser(MyUser user){//有返回值加return,没有返回值直接调用usermapper.addUser(user);}public void deleteUser(int id){
// service中直接调用mapper方法usermapper.deleteUser(id);}public void updateUser(MyUser user){usermapper.updateUser(user);}public MyUser selectUserById(int id){return usermapper.selectUserById(id);}}
mybatis>UserMapper
<?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.pojo.UserMapper"><select id="selectUser" resultType="com.bean.MyUser">select * from myuser</select><insert id="addUser" parameterType="com.bean.MyUser">insert into myuser(username,password) values (#{username},#{password})</insert><!--这里的参数只有id值,直接在模板使用id值--><delete id="deleteUser" parameterType="int">delete from myuser where id=#{id}</delete><update id="updateUser" parameterType="com.bean.MyUser">update myuser set username=#{username},password=#{password} where id=#{id}</update><select id="selectUserById" parameterType="int" resultType="com.bean.MyUser">select * from myuser where id=#{id}</select></mapper>
🙅happy~有点不想用Java,但是实训内容这样的,那就先学吧~~
相关文章:
云监控(华为) | 实训学习day3(10)
实现数据的增删改查 SpringBoot框架模式 向送外卖一样理解 写程序 1、准备食材(java bean) 2、菜谱(pojo接口->预制->sql 语句) 3、service处理 4、controller 派送 5、用户请求->页面 一、Spring Boot实现增加 第一步:食材(表),用户增加,这里还是用户…...
springMVC前后端请求参数绑定和传递
目录 请求参数的绑定 当绑定参数是基本数据类型和字符串类型时,要注意: 当绑定参数是实体类型(JavaBean)要注意: 给集合属性数据封装,要注意: 绑定参数是日期类型,如何封装: 代码实例: 实体类1&#…...
【iOS】—— 消息传递和消息转发
【iOS】—— 消息传递和消息转发 1. 消息传递SEL选择子IMP快速查找汇编代码查找过程总结消息转送快速查找IMP 慢速查找总结消息传递慢速查找IMP 2. 消息转发动态决议动态解析添加方法 快速转发慢速转发 总结动态决议消息转发消息的三次拯救 1. 消息传递 在iOS中,消…...
【Node.js】初识 Node.js
Node.js 概念 Node.js 是一个开源与跨平台的 JavaScript运行时环境 ,在浏览器外运行 V8 JavaScript 引擎(Google Chrome的内核),利用事件驱动、非阻塞和异步输入输出 等技术提高性能。 可以理解为 Node.js就是一个服务器端的、非阻塞式 l/O 的、事件驱…...
AWS backup服务和 RDS snapshot的关系
首先,其实RDS的snapshot,自动备份和手动备份,就是调用的AWS backup服务,只不过是通过RDS控制台,API等等进行控制和管理的。 1. AWS backup 服务对于RDS的备份来说包括两部分: --连续备份(需要…...
PDF转Word怎么快速转换?格式转换技巧分享
PDF文件和Word文档是我们日常工作中不可或缺的文件格式,同时文件之间的格式转换也十分常见。不同的格式有着不同的优点,将PDF文件改为Word文档后,在编辑或修改文件内容时更为方便。 下面小编就来给大家介绍几种常用的PDF转Word的转换方法&am…...
浅谈:网络协议及网络连接
事情的起因 怪有意思的。(纯纯唠嗑,不感兴趣的可以跳过) 我们初中,在学期的最后一天换教室,由于我们是十三班,是年级里面的一个“例外”。因为我们其他年级都是12个和10个班级,就我们一个奇数…...
websocket-react使用
问题 在一个应用中,如果需要在不同的组件之间共享同一个WebSocket连接,可以采用多种方法来实现。 比如:单例模式、全局变量、react context React上下文(React Context) 如果你使用的是React,可以使用Re…...
【总结】nginx源码编译安装报错./configure: error: SSL modules require the OpenSSL library.
问题现象 源码编译安装nginx时,执行./configure …… --with-http_ssl_module 命令安装https模块,需要用到openssl,由于机器缺少openssl库,报如下错误。 …… checking for openat(), fstatat() ... found checking for getaddr…...
昇思25天学习打卡营第15天|两个分类实验
打卡 目录 打卡 实验1:K近邻算法实现红酒聚类 数据准备 模型构建--计算距离 计算演示 模型预测 实验2:基于MobileNetv2的垃圾分类 任务说明 数据集 参数配置(训练/验证/推理) 数据预处理 MobileNetV2模型搭建 Mobile…...
实践:Redis6.0配置文件解读
详细解读redis配置文件 https://raw.githubusercontent.com/redis/redis/6.2/redis.conf Units 配置数据单位换算关系配置大小单位:当需要内存大小时,可以指定。开头定义了一些基本的度量单位,只支持bytes,不支持bit࿰…...
【Go系列】Go语言的网络服务
承上启下 我们既然知道了Go语言的语法,也了解到了Go语言如何协同工作机制。那么对于这样一款天生支持高并发的语言,它的用武之地自然而然的就是网络服务了。我们今天学学如何使用网络服务。 开始学习 Go语言使用网络服务 在Go语言中,使用网…...
CS110L(Rust)
1.Rust 语法总结 数值类型 有符号整数: i8, i16, i32, i64无符号整数: u8, u16, u32, u64 变量声明 声明变量: let i 0; // 类型推断let n: i32 1; // 显式类型声明 可变变量: let mut n 0; n n 1; 字符串 注意,let s: str "Hello world";…...
免费恢复软件有哪些?电脑免费使用的 5 大数据恢复软件
您是否在发现需要的文件时不小心删除了回收站中的文件?您一定对误操作感到后悔。文件永远消失了吗?还有机会找回它们吗?当然有!您可以查看这篇文章,挑选 5 款功能强大的免费数据恢复软件,用于 Windows 和 M…...
Flink History Server配置
目录 问题复现 History Server配置 HADOOP_CLASSPATH配置 History Server配置 问题修复 启动flink集群 启动Histroty Server 问题复现 在bigdata111上执行如下命令开启socket: nc -lk 9999 如图: 在bigdata111上执行如下命令运行flink应用程序 …...
ASPICE过程改进原则:确保汽车软件开发的卓越性能
"在汽车行业中,软件已经成为驱动创新和增强产品功能的核心要素。然而,随着软件复杂性的增加,确保软件质量、可靠性和性能成为了一项严峻的挑战。ASPICE标准的引入,为汽车软件开发提供了一套全面的过程改进框架,以…...
HDU1005——Number Sequence,HDU1006——Tick and Tick,HDU1007——Quoit Design
目录 HDU1005——Number Sequence 题目描述 超时代码 代码思路 正确代码 代码思路 HDU1006——Tick and Tick 题目描述 运行代码 代码思路 HDU1007——Quoit Design 题目描述 运行代码 代码思路 HDU1005——Number Sequence 题目描述 Problem - 1005 超时代码…...
uniapp form表单校验
公司的一个老项目,又要重新上架,uniapp一套代码,打包生成iOS端发布到App Store,安卓端发布到腾讯应用宝、OPPO、小米、华为、vivo,安卓各大应用市场上架要求不一样,可真麻烦啊 光一个表单校验,…...
构建RSS订阅机器人:观察者模式的实践与创新
在信息爆炸的时代,如何高效地获取和处理信息成为了一个重要的问题。RSS订阅机器人作为一种自动化工具,能够帮助我们从海量信息中筛选出我们感兴趣的内容。 一、RSS 是什么?观察者模式又是什么? RSS订阅机器人是一种能够自动订阅…...
芯片基础 | `wire`类型引发的学习
在Verilog中,wire类型是一种用于连接模块内部或模块之间的信号的数据类型。wire类型用于表示硬件中的物理连线,它可以传输任何类型的值(如0、1、高阻态z等),但它在任何给定的时间点上只能有一个确定的值。 wire类型通…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
