JavaWeb之综合案例
前言
这一节讲一个案例
1. 环境搭建







然后就是把这些数据全部用到sql语句中执行

2.查询所有-后台&前台

我们先写后台代码
2.1 后台
2.2 Dao
BrandMapper:

注意因为数据库里面的名称是下划线分割的,我们类里面是驼峰的,所以要映射

这里我们已经写好了
BrandMapper:

@Select("select * from tb_brand ")@ResultMap("brandResultMap")List<Brand> selectAll();
2.3 services
这下写这个我们先写一个接口,再写实现类


这个services要被servlet调用,所以我们在写servlet

以前是要在这里面创建一个services的类
现在我们就可以用接口指向实现类

BrandServiceImpl:

这个service我们就写完了
现在开始写servlet
SelectAllServlet:

运行一下试一下

现在开始写前端代码

页面加载完成之后发送异步请求—》有mounted
brand.html:原:

现在:



这样我们就写好了


刚好48条我们就做好了
3. 新增品牌

BrandMapper:

BrandService:

BrandServiceImpl:

AddServlet:

下面开始写前端代码
brand.html:

这里是提交按钮,提交以后就会调用addBrand方法

开始修改


结果发现点了提交没有反应,f12一下


发现我们数据是添加成功了的

问题主要是我们一个用下划线的this


关闭是关闭了,但是我们下面的数据没有显示完全
因为我们只是关闭的窗口,这个brand.html没有刷新的

所以我们的代码那里要重新查询一下

但是这个方法我们已经写过了,所以我们定义一个方法来专门存储

这样就可以了

这样就可以了


这样我们不刷新也有了
接下来我们在做一个小功能,就是新增完成之后,有一个新增成功的提示框

我们就要这个消息提示






4. Servlet代码优化
一个功能写一个servlet感觉不太好,这样写的太多了

这样的话就意味着,会有很多的请求路径来访问servlet,但是我们@WebServlet(“/addServlet”)这样写就写死了,就只能添加了

但是还有一个问题,就是我们的servlet只能执行doget和dopost,但我们要写我们自定义的方法,怎么办呢
所以就不能继承HttpServlet了

BaseServlet:

然后我们在定义一个brandSrvlet,它就继承我们定义的这个servlet就可以了,不用继承HttpServlet


BaseServlet:



写的这个/brand/SelectAll
但还是要先去执行BaseServlet中的service方法

这里的后面的参数就是执行方法的参数
执行方法的参数是什么呢,就是response和request
我们丰富一下


这样我们就写完了





接下来我们完成真正的功能
BrandServlet:

就把原来servlet里面的代码考过去就可以了
然后修改页面的访问路径
brand.html:






然后注释掉

5. 批量删除

Dao:
BrandMapper:

BrandMapper.xml:

这里问号该有几个呢—》动态sql拼接

service:
BrandService:

BrandServiceImpl:

BrandServlet:

brand.html:

批量删除在这里
然后绑定一个单击事件

然后写出方法

这个是我们选中的复选框,之后会把数据放在这个模型里面

我们来试一下
看有没有我们选中的数据



我们来复制一下

就是这个样子
可以看出,这就是一个数组,里面是一个一个brand对象
我们需要的是id

我们增加一个id的模型数据

这样我们就写完了

但是我们点了删除没有反应
f12


看一下报错,就知道了,sql语句有问题
BrandMapper.xml:

我们发现了问题就是where后面少写了id


这样就成功了
点删除的话,我们应该提示一下,是否要这样操作,不然误操作了


这里确定就执行then的逻辑,取消就执行catch的逻辑
brand.html:



这样就可以了




6. 分页查询
6.1 分析
要分页查询的话,数据库里面也要分页查询




我们先来创建pageBean



6.2 实现

BrandMapper:

BrandService:

BrandServiceImpl:

BrandServlet:

测试一下:

现在开始写前端代码


我们要改造这个方法,因为我们只需要查询一页就可以了


注意我们resp获取出来的数据是一个大类

测试一下,发现有错,主要是因为我们的selectByPage没有写ResultMap,添加上去就可以了


但是还不能翻页
现在我们改一下共400条那里

因为这里我们写的是400
改一下,写成模型数据


我们在selectAll中设置这个模型值


但是这里默认显示的是4页,我们也改一下

原因就是因为这里的currentPage,这里默认是4

改为1


现在我们应该点完页码数据就应该产生变化

这里就要看上面的两个方法了
size-change是每页显示条数发生变化,执行的代码
current-change是当前页码发生变化显示条数


我们给这里的currentPage写成动态的,会变化的

这样就可以了
然后添加模型数据


这样就可以了

这样就可以动态变化了
然后在修改另一个方法


这里是可以输入修改的,但是不能用数字键盘

7. 条件查询
7.1后台


BrandMapper:


BrandMapper.xml:

第一个sql语句我们就写完了
第二个和第一个就比较类似了

因为我们第二个sql语句的方法只有一个参数,所以没有param注解,所以不用brand.来
然后我们ctrl+r整体替换就可以了


BrandService:

BrandServiceImpl

BrandServlet:

分页还好传递,通过get来就是url
但是brand条件怎么传递呢
brand.html:
原:


我们这里增加一个data这个JSON数据,我们既有url参数,也有请求体里面的参数,请求体的参数获取—》就可以获取条件了
BrandServlet:

7.2 前端
查询条件我们也要绑定一个对象模型

这里其实我们都绑定上了

我们先给这个按钮绑定一个单击事件

已经有了



发现并没有错

然后修改selectAll

注意还要修改一下我们访问的方法名

但是我们运行出来会报错


我们发现是动态sql的问题
为什么会这样呢,经过我的仔细检查,发现错误就是

就是动态sql那里不能写注释,写了注释就要出错,改了就没事了

这个没有带条件的查询的就是全部


现在我们优化一下,就是当前状态那里改为启用和禁用

Brand实体类里面有一个逻辑视图,就是这个就可以了

这里就是那个状态的展示
我们改一下

这个就是逻辑视图的妙

8. 前端代码优化

如果里面能直接写this就很方便了

这样写就相当于lambda表达式,里面就不用写_this了
总结
以后开始讲SSM了
相关文章:
JavaWeb之综合案例
前言 这一节讲一个案例 1. 环境搭建 然后就是把这些数据全部用到sql语句中执行 2.查询所有-后台&前台 我们先写后台代码 2.1 后台 2.2 Dao BrandMapper: 注意因为数据库里面的名称是下划线分割的,我们类里面是驼峰的,所以要映射 …...
MySQL 报错:1137 - Can‘t reopen table
MySQL 报错:1137 - Can’t reopen table 1. 问题 对临时表查询: select a.ts_code,a.tsnum,b.tsnum from (select t.ts_code ,count(*) tsnum from tmp_table t group by t.ts_code having count(*) > 20 and count(*)< 50 ) a ,(select t.ts_…...
Claude3.5-Sonnet和GPT-4o怎么选(附使用链接)
随着人工智能模型的不断进化,传统的评估标准已经逐渐变得陈旧和不再适用。以经典的“喝水测试”为例,过去广泛应用于检测模型能力,但现如今即便是国内的一些先进模型,也能够轻松答对这些简单的问题。因此,我们亟需引入…...
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
在网上找了很多种办法 都解决不了; 最后发现是文本域字体设置出了问题; 在这不展示其他的代码 只展示重要代码; 1 引入扩展包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</v…...
java-贪心算法
1. 霍夫曼编码(Huffman Coding) 描述: 霍夫曼编码是一种使用变长编码表对数据进行编码的算法,由David A. Huffman在1952年发明。它是一种贪心算法,用于数据压缩。霍夫曼编码通过构建一个二叉树(霍夫曼树&a…...
OpenCV和Qt坐标系不一致问题
“ OpenCV和QT坐标系导致绘图精度下降问题。” OpenCV和Qt常用的坐标系都是笛卡尔坐标系,但是细微处有些不同。 01 — OpenCV坐标系 OpenCV是图像处理库,是以图像像素为一个坐标位置,即一个像素对应一个坐标,所以其坐标系也叫图像…...
前端VUE项目启动方式
将VUE项目的前端项目运行起来,整个过程非常简单,预计5分钟就可以完成,取决于大家的网速。 项目运行先安装Node.js Windows 安装 Node.js 指南:http://www.iocoder.cn/NodeJS/windows-install(opens new window) Mac 安装 Node.js…...
Python小白学习教程从入门到入坑------习题课5(基础巩固)
目录 实战题 1、“千年虫”是什么虫? 2、模拟京东购物流程 3、模拟12306火车票订票流程 4、模拟手机通讯录 实战题 1、“千年虫”是什么虫? 要求:已知一个列表中存储的是员工的出生年份 [88,89,90,98,00,99] 由于时间比较久,出生的年份均为2位整数…...
飞凌嵌入式T113-i开发板RISC-V核的实时应用方案
随着市场对嵌入式设备的功能需求越来越高,集成了嵌入式处理器和实时处理器的主控方案日益增多,以便更好地平衡性能与效率——实时核负责高实时性任务,A核处理复杂任务,两核间需实时交换数据。然而在数据传输方面,传统串…...
基于Java后台实现百度、高德和WGS84坐标的转换实战
目录 前言 一、需求的缘由 1、百度坐标拾取 2、高德坐标拾取 3、不同地图的坐标展示 二、后端坐标偏移转换处理 1、相关类库介绍 2、coordtransorm类图介绍 3、后台实际转换 三、总结 前言 在当今数字化时代,地理位置信息的精确性和实时性对于各种应用至…...
SQL,力扣题目1635,Hopper 公司查询 I
一、力扣链接 LeetCode_1635 二、题目描述 表: Drivers ---------------------- | Column Name | Type | ---------------------- | driver_id | int | | join_date | date | ---------------------- driver_id 是该表的主键(具有唯一值的列)。 该表的每一行…...
Android 分区相关介绍
目录 一、MTK平台 1、MTK平台分区表配置 2、MTK平台刷机配置表 3、MTK平台分区表配置不生效 4、Super分区的研究 1)Super partition layout 2)Block device table 二、高通平台 三、展锐平台 四、相关案例 1、Super分区不够导致编译报错 经验…...
JMeter监听器与压测监控之 InfluxDB
1. 简介 在本文中,我们将介绍如何在 Kali Linux 上通过 Docker 安装 InfluxDB,并使用 JMeter 对其进行性能监控。InfluxDB 是一个高性能的时序数据库,而 JMeter 是一个开源的性能测试工具,可以用于对各种服务进行负载测试和性能监…...
信息安全管理与评估赛项(网络安全)--应急响应专项训练
web1 题目来源:https://mp.weixin.qq.com/s/89IS3jPePjBHFKPXnGmKfA 题目 1.攻击者的shell密码2.攻击者的IP地址3.攻击者的隐藏账户名称4.攻击者挖矿程序的矿池域名(仅域名)5.有实力的可以尝试着修复漏洞靶机 用户:administrator密码:Zgsfadmin.com题解 攻击者…...
ElasticSearch学习篇18_《检索技术核心20讲》LevelDB设计思想
目录 一些常见的设计思想以及基于LSM树的LevelDB是如何利用这些设计思想优化存储、检索效率的。 几种常见的设计思想 索引和数据分离减少磁盘IO读写分离分层思想 LevelDB的设计思想 读写分离设计分层设计与延迟合并LRU缓存加速检索 几种常见设计思想 索引与数据分离 索引…...
使用 FFmpeg 提取音频的详细指南
FFmpeg 是一个开源的多媒体处理工具,支持视频、音频的编码、解码、转换等多种功能。通过 FFmpeg,提取视频中的音频并保存为各种格式非常简单和高效。这在音视频剪辑、媒体处理、转码等场景中具有广泛的应用。 本文将详细讲解如何使用 FFmpeg 提取音频&a…...
中国省级新质生产力发展指数数据(任宇新版本)2010-2023年
一、测算方式:参考C刊《财经理论与实践》任宇新(2024)老师的研究,新质生产力以劳动者劳动资料劳动对象及其优化组合的质变为 基本内涵,借 鉴 王 珏 和 王 荣 基 的 做 法构建新质生产力发展水平评价指标体系如下所示&a…...
C++设计模式:建造者模式(Builder) 房屋建造案例
什么是建造者模式? 建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说: 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。通过…...
Python 快速入门(上篇)❖ Python基础知识
Python 基础知识 Python安装**运行第一个程序:基本数据类型算术运算符变量赋值操作符转义符获取用户输入综合案例:简单计算器实现Python安装** Linux安装: yum install python36 -y或者编译安装指定版本:https://www.python.org/downloads/source/ wget https://www.pyt…...
string接口的模拟实现
文章目录 一. string底层逻辑演示声明和定义分开 二. size()三. operator[]四. 迭代器四. const迭代器五. 预留空间(reserve)六. 尾插一个字符push_back七. 尾插一个字符串append八. operator九. operator 一. string底层逻辑 (1)为了和库里面…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
