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了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】MPU6050初始化常用寄存器说明及示例代码

一、MPU6050常用配置寄存器 1、电源管理寄存器1&#xff08; PWR_MGMT_1 &#xff09; 此寄存器允许用户配置电源模式和时钟源。 DEVICE_RESET &#xff1a;用于控制复位的比特位。设置为1时复位 MPU6050&#xff0c;内部寄存器恢复为默认值&#xff0c;复位结束…

隐私友好型分析平台Plausible Analytics

什么是 Plausible Analytics &#xff1f; Plausible Analytics 是一个简单、轻量级&#xff08;小于1KB&#xff09;、开源且隐私友好的网站分析工具&#xff0c;旨在作为 Google Analytics 的替代品。它不使用 cookies 并且完全符合 GDPR、CCPA 和 PECR 法规&#xff0c;因此…

Flutter:RotationTransition旋转动画

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationController late AnimationController _controller;overridevoid initState() {super…

【大数据学习 | Spark-Core】Spark提交及运行流程

spark的集群运行结构 我们要选择第一种使用方式 命令组成结构 spark-submit [选项] jar包 参数 standalone集群能够使用的选项。 --master MASTER_URL #集群地址 --class class_name #jar包中的类 --executor-memory MEM #executor的内存 --executor-cores NUM # executor的…

青训营刷题笔记16

问题描述 小R从班级中抽取了一些同学&#xff0c;每位同学都会给出一个数字。已知在这些数字中&#xff0c;某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。 测试样例 样例1&#xff1a; 输入&#xff1a;array [1, 3, 8, 2, 3, 1, 3, 3, 3] 输出…

C4D技巧总结

鼠标右键单击这两个小箭头可以把参数恢复到默认值&#xff01; 对象坐标 全局坐标 按住Alt键&#xff0c;点击挤压&#xff08;或者其他绿色的图标&#xff09;&#xff0c;可以快速形成父子级效果&#xff01;

(动画)Qt控件 QLCDNumer

文章目录 LCD Number1. 介绍2. 核心属性3 . 代码实现:倒计时1. 在界⾯上创建⼀个 QLCDNumber , 初始值设为 10.2. 修改 widget.h 代码, 创建⼀个 QTimer 成员, 和⼀个 updateTime 函数3. 修改 widget.cpp, 在构造函数中初始化 QTimer4. 修改 widget.cpp, 实现 updateTime 4. 动…

draggable的el-dialog实现对话框标题可以选择

请看图 这个对话框使用了el-dialog并且draggable属性设置成了true&#xff0c;所以标题栏这里就可以拖动&#xff0c;现在用户想选中标题栏的文本进而复制。我看到这个需求头都大了。 我能想到的方案有三个&#xff1a;1. 取消draggable为true 2. 标题文案后面加一个复制按钮 …

DeepSpeed-chat RLHF实战

轩辕-6bRLHF落地实战 模型介绍&#xff1a;轩辕-6B 模型库 (modelscope.cn) 1.1偏好数据集构建 ​ 1.1.1Prompt构建 1.1.2 Response生成 保证RM训练数据和测试数据分布一致 使用模型来生成response&#xff0c;为了评价response的质量&#xff0c;可以提高采样参数中的…

Java-05 深入浅出 MyBatis - 配置深入 动态 SQL 参数、循环、片段

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Prompting LLMs to Solve Complex Tasks: A Review

文章目录 题目简介任务分解未来方向结论 题目 促使 LLM 解决复杂任务&#xff1a; 综述 论文地址&#xff1a;https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf 简介 大型语言模型 (LLM) 的最新趋势显而易见&#xff0c;这体现在大型科技公司的投资以及媒体和在线社…

恋爱通信史之完整性

在前面的章节中&#xff0c;介绍了对通信消息的加密&#xff0c;可以保证保密性(机密性)。虽说中间人无法解密通信消息的内容&#xff0c;但是可以篡改通信的消息。在接受者视角来看&#xff0c;是无法识别通信消息是否被篡改。因此&#xff0c;必须引入一种机制&#xff0c;保…

Easyexcel(5-自定义列宽)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09;Easyexcel&#xff08;5-自定义列宽&#xff09; 注解 ColumnWidth Data…

C#调用C++ DLL方法之C++/CLI(托管C++)

托管C与C/CLI前世今生 C/CLI (C/Common Language Infrastructure) 是一种用于编写托管代码的语言扩展&#xff0c;它是为了与 .NET Framework 进行互操作而设计的。C/CLI 是 C 的一种方言&#xff0c;它引入了一些新的语法和关键字&#xff0c;以便更好地支持 .NET 类型和垃圾…

家庭智慧工程师:如何通过科技提升家居生活质量

在今天的数字化时代&#xff0c;家居生活已经不再只是简单的“住”的地方。随着物联网&#xff08;IoT&#xff09;、人工智能&#xff08;AI&#xff09;以及自动化技术的快速发展&#xff0c;越来越多的家庭开始拥抱智慧家居技术&#xff0c;将他们的家变得更加智能化、便捷和…

【Unity踩坑】出现d3d11问题导致编辑器崩溃

升级到Unity 6&#xff0c;有时出现下面这种D3D11的问题&#xff0c;会导致编辑器崩溃。 有人总结了这个问题的解决方法&#xff0c;可以做为参考&#xff1a; Failed to present D3D11 swapchain due to device reset/removed. List of Solutions - Unity Engine - Unity Dis…

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes

CSP/信奥赛C语法基础刷题训练&#xff08;23&#xff09;&#xff1a;洛谷P1217&#xff1a;[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数&#xff08;从左到右和从右到左是看一样的&#xff09;&#xff0c;所以 151 151 …

SCTransNet验证测试

SCTransNet 是PRCV 2024、ICPR 2024 Track 1、ICPR 2024 Track 2 三项比赛冠军方案的 Baseline, 同时也是多个优胜算法的Baselines. Bilibili 视频分享 【工作分享】SCTransNet:面向红外弱小目标检测的空间 - 通道交叉 Transformer_哔哩哔哩_bilibili 极市平台 推文分享 …

【C++】继承(inheritance)

引入 假设我们有一个动物类 class Animal { public:int age;void eat() {std::cout << "吃东西&#xff01;" << std::endl;} };又想写一个狗类&#xff0c;它也有年龄&#xff0c;也会吃&#xff0c;除此之外还有种类 class Dog { public:const char…

ThinkPad t61p 作SMB服务器,打印服务器,pc ,android ,ipad利用此服务器互传文件

1.在t61p上安装win7 2,配置好smb 服务 3.再安装好打印驱动程序 4.pc与win7利用系统的网络互相发现,映射为硬盘使用。 5.android&#xff0c;ipad安装ES文件浏览器访问win7 共享文件夹&#xff0c;互传文件。 6.android手机安装FE文件浏览器&#xff0c;可以利用花生壳外网…