当前位置: 首页 > 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类型通…...

如何在AWS上构建Apache DolphinScheduler

引言 随着云计算技术的发展&#xff0c;Amazon Web Services (AWS) 作为一个开放的平台&#xff0c;一直在帮助开发者更好的在云上构建和使用开源软件&#xff0c;同时也与开源社区紧密合作&#xff0c;推动开源项目的发展。 本文主要探讨2024年值得关注的一些开源软件及其在…...

Quartus II 13.1添加新的FPGA器件库

最近需要用到Altera的一款MAX II 系列EPM240的FPGA芯片&#xff0c;所以需要给我的Quartus II 13.1添加新的器件库&#xff0c;在此记录一下过程。 1 下载所需的期间库 进入Inter官网&#xff0c;&#xff08;Altera已经被Inter收购&#xff09;https://www.intel.cn/content…...

【html】html的基础知识(面试重点)

一、如何理解HTML语义化 1、思考 A、在没有任何样式的前提下&#xff0c;将代码在浏览器打开&#xff0c;也能够结构清晰的展示出来。标题是标题、段落是段落、列表是列表。 B、便于搜索引擎优化。 2、参考答案 A、让人更容易读懂&#xff08;增加代码可读性&#xff09;。 B、…...

Java 网络编程(TCP编程 和 UDP编程)

1. Java 网络编程&#xff08;TCP编程 和 UDP编程&#xff09; 文章目录 1. Java 网络编程&#xff08;TCP编程 和 UDP编程&#xff09;2. 网络编程的概念3. IP 地址3.1 IP地址相关的&#xff1a;域名与DNS 4. 端口号&#xff08;port&#xff09;5. 通信协议5.1 通信协议相关的…...

STM32 | 看门狗+RTC源码解析

点击上方"蓝字"关注我们 作业 1、使用基本定时7,完成一个定时喂狗的程序 01、上节回顾 STM32 | 独立看门狗+RTC时间(第八天)02、定时器头文件 #ifndef __TIM_H#define __TIM_H​#include "stm32f4xx.h"​void Tim3_Init(void);void Tim7_Init(void);​…...

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from…...

Django实战项目之进销存数据分析报表——第一天:Anaconda 环境搭建

引言 Anaconda是一个流行的Python和R语言的发行版&#xff0c;它包含了大量预安装的数据科学、机器学习库和科学计算工具。使用Anaconda可以轻松地创建隔离的环境&#xff0c;每个环境都可以有自己的一套库和Python版本&#xff0c;非常适合多项目开发。本文将指导你如何安装A…...

Linux部署Prometheus+Grafana

【Linux】PrometheusGrafana 一、Prometheus&#xff08;普罗米修斯&#xff09;1、Prometheus简述2、Prometheus特点3、Prometheus生态组件4、Prometheus工作原理 二、部署Prometheus1、系统架构2、部署Prometheus3、修改配置文件4、配置系统启动文件 三、部署 Node Exporter …...

【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列预测|附代码数据

全文链接&#xff1a;https://tecdat.cn/?p37019 分析师&#xff1a;Haopeng Li 随着我国股票市场规模的不断扩大、制度的不断完善&#xff0c;它在金融市场中也成为了越来越不可或缺的一部分。 【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列…...

低代码前端框架Amis全面教程

什么是Amis&#xff1f; 1.1 Amis的基本概念 Amis是一个基于JSON配置的前端低代码框架&#xff0c;由百度开源。它允许开发者通过简单的JSON配置文件来生成复杂的后台管理页面&#xff0c;从而大大减少了前端开发的工作量。Amis的核心理念是通过配置而非编码来实现页面的构建…...

做设计参考的网站/轻松seo优化排名

本文实例讲述了Python3.5面向对象程序设计之类的继承和多态。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 1、继承的定义 继承是指&#xff1a;可以使用现有类的所有功能&#xff0c;并在无需重新编写原来的类的情况下对这些功能进行扩展。 &#xff08;1&#xff0…...

安徽网站建设认准-晨飞网络/如何在网上推广产品

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 不识庐山真面目&#xff0c;只缘身在此山中。1. 这几天陆续收到很多读者、球友的留言、私信&#xff0c;说要怎么学Python&#xff1f;有没有基础的&am…...

七冶建设集团网站/青岛官网seo方法

搬入新居并布置了家具位置之后&#xff0c;总觉得布线不是很合理&#xff0c;想放个电话的地方没有RJ11插座却反而有个RJ45的插座&#xff0c;想放电脑的地方没有网线插座(我的电脑比较特殊&#xff0c;不是WIFI可以解决的)&#xff0c;怎么办&#xff1f;动手吧&#xff01;幸…...

设计类专业哪个最好/百度推广优化技巧

正则表达式不仅能找到文本模式&#xff0c;而且能够用新的文本替换掉这些模式。Regex 对象的 sub()方法需要传入两个参数。第一个参数是一个字符串&#xff0c;用于取代发现的匹配。第二个参数是一个字符串&#xff0c;即正则表达式。sub()方法返回替换完成后的字符串。 例如&a…...

网站二级目录做网站/郑州厉害的seo优化顾问

创建TestFileManager类&#xff0c;在本类中分别创建factFile()方法(遍历文件夹中所有的文件)、console()方法(换行)、createFolder()方法(创建文件夹)、 renameFile()方法(改名)、deleteFile()方法(删除文件)、copyFile()方法(复制文件)、showContent()(每一次操作完成重新输出…...

用模板做的网站权重高吗/广州新闻发布

我正在使用PHP / TCPdf创建pdf文件,并希望该文件只能由Adobe Reader查看.我想显示相同或其他消息&#xff1a;To view the full contents of this document, you need a later version of the PDF viewer. You can upgrade to the latest version of Adobe Reader from www.ado…...