云监控(华为) | 实训学习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,但是实训内容这样的,那就先学吧~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46512.shtml

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

相关文章

【Android studio环境搭建】Android studio连接夜神模拟器

Android studio连接夜神模拟器 一、 步骤 1.下载好Android Studio和夜神模拟器, 2.打开夜神模拟器&#xff0c;找到其安装目录下的 nox_adb.exe文件 3.右键进入cmd命令打开&#xff0c;管理员权限执行下面命令 PS D:\Program Files\Nox\bin> .\nox_adb.exe connect 127.…

【论文解读】VoxelNeXt: Fully Sparse VoxelNet for 3D Object Detection and Tracking

VoxelNeXt 摘要引言方法Sparse CNN Backbone AdaptationSparse Prediction Head 3D Tracking实验结论 摘要 3D物体检测器通常依赖于手工制作的方法&#xff0c;例如锚点或中心&#xff0c;并将经过充分学习的2D框架转换为3D。因此&#xff0c;稀疏体素特征需要通过密集预测头进…

免费的数字孪生平台助力产业创新,让新质生产力概念有据可依

关于新质生产力的概念&#xff0c;在如今传统企业现代化发展中被反复提及。 那到底什么是新质生产力&#xff1f;它与哪些行业存在联系&#xff0c;我们又该使用什么工具来加快新质生产力的发展呢&#xff1f;今天我将介绍一款为发展新质生产力而量身定做的数字孪生工具。 新…

OpenCv 如何在 Java 中使用

Java 项目引入 OpenCv 环境准备OpenCv介绍下载Maven 安装动态链接库 完成 环境准备 JDK 8 OpenCv 4.0.0 Maven 3.9 Windows 11 OpenCv 介绍 OpenCV&#xff08;开源计算机视觉库&#xff09;是一个功能强大的计算机视觉和机器学习库。它提供了广泛的工具和算法&#xff0c;用…

MYSQL中的库表建立基础操作

任务&#xff1a;新建产品库mydb6_product&#xff0c; 新建3张表如下: 一&#xff0c; employees表 &#xff08;1&#xff09;:id&#xff0c;整型&#xff0c;主键 &#xff08;2&#xff09;:name&#xff0c;字符串&#xff0c;最大长度50&#xff0c;不能为空 &#xff…

【Django】网上蛋糕商城后台-类目管理

1.类目管理列表实现 当管理员进入后台管理后&#xff0c;点击类目管理&#xff0c;向服务器发出请求 path(admin/type_list/,viewsAdmin.type_list), # 处理商品分类管理列表请求 def type_list(request):# 读取分页页码try:ym request.GET["ym"]except:ym 1# 查…

html2canvas + jspdf 纯前端HTML导出PDF的实现与问题

前言 这几天接到一个需求&#xff0c;富文本编辑器的内容不仅要展示出来&#xff0c;还要实现展示的内容导出pdf文件。一开始导出pdf的功能是由后端来做的&#xff0c;然后发现对于宽度太大的图片&#xff0c;导出的pdf文件里部分图片内容被遮盖了&#xff0c;但在前端是正常显…

【Node.js】会话控制

express 中操作 cookie cookie 是保存在浏览器端的一小块数据。 cookie 是按照域名划分保存的。 浏览器向服务器发送请求时&#xff0c;会自动将 当前域名下可用的 cookie 设置在请求头中&#xff0c;然后传递给服务器。 这个请求头的名字也叫 cookie &#xff0c;所以将 c…

LLaMA 背景

什么是LLaMA&#xff1f; 模型介绍&#xff1a;LLaMA是Meta开发的语言模型&#xff0c;旨在推动开放科学和人工智能的实践。 参数范围&#xff1a;这些模型的参数数量从7B到65B不等&#xff0c;覆盖了不同规模的需求。 训练数据&#xff1a;LLaMA模型是在数万亿个公开数据集的…

Python算法实现之排序算法的Python实现详解

概要 排序算法是计算机科学中最基础和最重要的算法之一。它们在数据处理中起着关键作用,广泛应用于搜索、数据分析和优化等领域。本文将详细介绍几种常见的排序算法及其Python实现,包括冒泡排序、选择排序、插入排序、归并排序和快速排序,并通过具体示例代码展示它们的工作…

推荐一款基于Spring Boot 框架开发的分布式文件管理系统,功能齐全,非常便捷(带私活源码)

前言 在数字化时代&#xff0c;文件管理是企业和个人用户的基本需求。然而&#xff0c;现有的文件管理系统往往存在一些痛点&#xff0c;如存储空间有限、文件共享困难、缺乏在线编辑功能、移动端适配性差等。这些问题限制了用户在不同设备和场景下的文件处理能力。 为了解决…

【20】读感 - 架构整洁之道(二)

概述 继上一篇文章讲了前两章的读感&#xff0c;已经归纳总结的重点&#xff0c;这章会继续跟进的看一下&#xff0c;深挖架构整洁之道。 编程范式 编程范式从早期到至今&#xff0c;提过哪些编程范式&#xff0c;结构化编程&#xff0c;面向对象编程&#xff0c;函数式编程…

ClickHouse 入门(二)【基础SQL操作】

1、ClickHouse 1.1、SQL 操作 这里只介绍一些和我们之前 MySQL 不同的语法&#xff1b; 1.1.1、Update 和 Delete ClickHouse 提供了 Delete 和 Update 的能力&#xff0c;这类操作被称为 Mutation 查询&#xff08;可变查询&#xff09;&#xff0c;它可以看 做 Alter 的一…

负载均衡 lvs

1. 4层转发(L4) 与 7层转发(L7) 区别 4层转发(L4) 与 7层转发(L7) 区别 转发基于的信息 状态 常用的服务 L4 基于网络层和传输层信息&#xff1a; L4转发主要依赖于网络层IP头部(源地址&#xff0c;目标地址&#xff0c;源端口&#xff0c;目标端口)和传输层头部&#xff…

珈和科技完成全国首个农险服务类数据产品入表,实现数据资产化

近日&#xff0c;珈和科技与东湖大数据合作&#xff0c;完成全国首个保险服务类数据产品入表&#xff0c;标志着我国商业卫星遥感应用领域迈出了数据资产化的关键一步。 此次入表的数据产品为“华北农业保险服务数据集数据产品”&#xff0c;是珈和科技融合卫星遥感与无人机等…

新华三H3CNE网络工程师认证—VLAN使用场景与原理

通过华三的技术原理与VLAN配置来学习&#xff0c;首先介绍VLAN&#xff0c;然后介绍VLAN的基本原理&#xff0c;最后介绍VLAN的基本配置。 一、传统以太网问题 在传统网络中&#xff0c;交换机的数量足够多就会出现问题&#xff0c;广播域变得很大&#xff0c;分割广播域需要…

前端学习(二)之HTML

一、HTML文件结构 <!DOCTYPE html> <!-- 告诉浏览器&#xff0c;这是一个HTML文件 --><html lang"en"> <!-- 根元素&#xff08;起始点&#xff0c;最外层容器&#xff09; --><head> <!-- 文档的头部&#xff08;元信息&#xff…

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器&#xff0c;它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能&#xff1a; 实时预览&#xff1a;Typora支持实时预览功能&#xff0…

实战篇(十一) : 拥抱交互的三维世界:利用 Processing 和 OpenGL 实现炫彩粒子系统

🌌 拥抱交互的三维世界:利用 Processing 和 OpenGL 实现炫彩粒子系统 在现代计算机图形学中,三维粒子系统是一个激动人心的领域。它不仅可以用来模拟自然现象,如烟雾、火焰和水流,还可以用来创造出令人叹为观止的视觉效果。在这篇文章中,我们将深入探讨如何使用 Proces…

【linux】服务器安装NVIDIA驱动

【linux】服务器安装NVIDIA驱动 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 文章目录 【linux】服务器安装NVIDIA驱动一、关闭系统自带驱动nouveau二、下载英伟达驱动三、安装英伟达驱动1、禁用X服务器和相关进程2、在TTY终端安装驱动3、验证是否安装成功4、重新启…