当前位置: 首页 > news >正文

云监控(华为) | 实训学习day3(10)

实现数据的增删改查

SpringBoot框架模式

向送外卖一样理解

写程序

1、准备食材(java bean)

2、菜谱(pojo接口->预制->sql 语句)  

3、service处理

4、controller 派送

5、用户请求->页面

一、Spring Boot实现增加

第一步:食材(表),用户增加,这里还是用户表,这是MyUseràbean

第二步:pojo里增加(添加的方法,)预制菜---Mapper

先写一个接口:

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

为xml的增加insert语句

注意:
  1. mapper的java接口名与xml 的文件名必须一致
  2. mapper接口增加的方法在xml中必须有一个id对应
  3. 注意返回值和参数值,如果接口中有返回值,xml有resultType,如果有接口有参数值,xml中有parameterType
  4. mapper标签的namespace必须指示到对应的mapper接口类中。
  5. 执行增删改操作必须有参数,参数类型指示的是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实现增加 第一步&#xff1a;食材(表),用户增加,这里还是用户…...

springMVC前后端请求参数绑定和传递

目录 请求参数的绑定 当绑定参数是基本数据类型和字符串类型时,要注意: 当绑定参数是实体类型&#xff08;JavaBean&#xff09;要注意: 给集合属性数据封装&#xff0c;要注意: 绑定参数是日期类型&#xff0c;如何封装&#xff1a; 代码实例&#xff1a; 实体类1&#…...

【iOS】—— 消息传递和消息转发

【iOS】—— 消息传递和消息转发 1. 消息传递SEL选择子IMP快速查找汇编代码查找过程总结消息转送快速查找IMP 慢速查找总结消息传递慢速查找IMP 2. 消息转发动态决议动态解析添加方法 快速转发慢速转发 总结动态决议消息转发消息的三次拯救 1. 消息传递 在iOS中&#xff0c;消…...

【Node.js】初识 Node.js

Node.js 概念 Node.js 是一个开源与跨平台的 JavaScript运行时环境 &#xff0c;在浏览器外运行 V8 JavaScript 引擎(Google Chrome的内核)&#xff0c;利用事件驱动、非阻塞和异步输入输出 等技术提高性能。 可以理解为 Node.js就是一个服务器端的、非阻塞式 l/O 的、事件驱…...

AWS backup服务和 RDS snapshot的关系

首先&#xff0c;其实RDS的snapshot&#xff0c;自动备份和手动备份&#xff0c;就是调用的AWS backup服务&#xff0c;只不过是通过RDS控制台&#xff0c;API等等进行控制和管理的。 1. AWS backup 服务对于RDS的备份来说包括两部分&#xff1a; --连续备份&#xff08;需要…...

PDF转Word怎么快速转换?格式转换技巧分享

PDF文件和Word文档是我们日常工作中不可或缺的文件格式&#xff0c;同时文件之间的格式转换也十分常见。不同的格式有着不同的优点&#xff0c;将PDF文件改为Word文档后&#xff0c;在编辑或修改文件内容时更为方便。 下面小编就来给大家介绍几种常用的PDF转Word的转换方法&am…...

浅谈:网络协议及网络连接

事情的起因 怪有意思的。&#xff08;纯纯唠嗑&#xff0c;不感兴趣的可以跳过&#xff09; 我们初中&#xff0c;在学期的最后一天换教室&#xff0c;由于我们是十三班&#xff0c;是年级里面的一个“例外”。因为我们其他年级都是12个和10个班级&#xff0c;就我们一个奇数…...

websocket-react使用

问题 在一个应用中&#xff0c;如果需要在不同的组件之间共享同一个WebSocket连接&#xff0c;可以采用多种方法来实现。 比如&#xff1a;单例模式、全局变量、react context React上下文&#xff08;React Context&#xff09; 如果你使用的是React&#xff0c;可以使用Re…...

【总结】nginx源码编译安装报错./configure: error: SSL modules require the OpenSSL library.

问题现象 源码编译安装nginx时&#xff0c;执行./configure …… --with-http_ssl_module 命令安装https模块&#xff0c;需要用到openssl&#xff0c;由于机器缺少openssl库&#xff0c;报如下错误。 …… checking for openat(), fstatat() ... found checking for getaddr…...

昇思25天学习打卡营第15天|两个分类实验

打卡 目录 打卡 实验1&#xff1a;K近邻算法实现红酒聚类 数据准备 模型构建--计算距离 计算演示 模型预测 实验2&#xff1a;基于MobileNetv2的垃圾分类 任务说明 数据集 参数配置&#xff08;训练/验证/推理&#xff09; 数据预处理 MobileNetV2模型搭建 Mobile…...

实践:Redis6.0配置文件解读

详细解读redis配置文件 https://raw.githubusercontent.com/redis/redis/6.2/redis.conf Units 配置数据单位换算关系配置大小单位&#xff1a;当需要内存大小时&#xff0c;可以指定。开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit&#xff0…...

【Go系列】Go语言的网络服务

承上启下 我们既然知道了Go语言的语法&#xff0c;也了解到了Go语言如何协同工作机制。那么对于这样一款天生支持高并发的语言&#xff0c;它的用武之地自然而然的就是网络服务了。我们今天学学如何使用网络服务。 开始学习 Go语言使用网络服务 在Go语言中&#xff0c;使用网…...

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; 字符串 注意&#xff0c;let s: str "Hello world";…...

免费恢复软件有哪些?电脑免费使用的 5 大数据恢复软件

您是否在发现需要的文件时不小心删除了回收站中的文件&#xff1f;您一定对误操作感到后悔。文件永远消失了吗&#xff1f;还有机会找回它们吗&#xff1f;当然有&#xff01;您可以查看这篇文章&#xff0c;挑选 5 款功能强大的免费数据恢复软件&#xff0c;用于 Windows 和 M…...

Flink History Server配置

目录 问题复现 History Server配置 HADOOP_CLASSPATH配置 History Server配置 问题修复 启动flink集群 启动Histroty Server 问题复现 在bigdata111上执行如下命令开启socket&#xff1a; nc -lk 9999 如图&#xff1a; 在bigdata111上执行如下命令运行flink应用程序 …...

ASPICE过程改进原则:确保汽车软件开发的卓越性能

"在汽车行业中&#xff0c;软件已经成为驱动创新和增强产品功能的核心要素。然而&#xff0c;随着软件复杂性的增加&#xff0c;确保软件质量、可靠性和性能成为了一项严峻的挑战。ASPICE标准的引入&#xff0c;为汽车软件开发提供了一套全面的过程改进框架&#xff0c;以…...

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表单校验

公司的一个老项目&#xff0c;又要重新上架&#xff0c;uniapp一套代码&#xff0c;打包生成iOS端发布到App Store&#xff0c;安卓端发布到腾讯应用宝、OPPO、小米、华为、vivo&#xff0c;安卓各大应用市场上架要求不一样&#xff0c;可真麻烦啊 光一个表单校验&#xff0c;…...

构建RSS订阅机器人:观察者模式的实践与创新

在信息爆炸的时代&#xff0c;如何高效地获取和处理信息成为了一个重要的问题。RSS订阅机器人作为一种自动化工具&#xff0c;能够帮助我们从海量信息中筛选出我们感兴趣的内容。 一、RSS 是什么&#xff1f;观察者模式又是什么&#xff1f; RSS订阅机器人是一种能够自动订阅…...

芯片基础 | `wire`类型引发的学习

在Verilog中&#xff0c;wire类型是一种用于连接模块内部或模块之间的信号的数据类型。wire类型用于表示硬件中的物理连线&#xff0c;它可以传输任何类型的值&#xff08;如0、1、高阻态z等&#xff09;&#xff0c;但它在任何给定的时间点上只能有一个确定的值。 wire类型通…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...