个人在线学习网站(第五章 电子书管理功能开发)

news/2024/5/8 15:02:22/文章来源:https://blog.csdn.net/weixin_58642210/article/details/122774741

新增一个ebook页面--新增路由

the-header加菜单--点击跳转的页面--在index中添加路由--在the-header中跳转路由

使用PageHelper实现后端分页

集成PageHelper插件
 

        <!-- pagehelper 插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.13</version></dependency>

修改电子书列表接口,支持分页(假分页数据)
分页参数PageNum从1开始
只对第一个遇到的SQL起作用
 

PageHelper.startPage(PageNum,PageSize);

在日志中把sql语句打印出来

application.properties中加入
 

# 打印所有的sql日志:sql, 参数, 结果
logging.level.com.jwt.sys.mapper=trace

以后很多功能都会用到分页,他们的分页都是PageReq

请求参数PageNum PageSize是0,表示前端数据根本没传到后端

@RequestBody注解对应的就是json方式的post提交

完成电子书编辑功能

  1. 在EbookController中写一个ebook的保存接口
    最后保存成功,不需要返回任何东西,只需要返回CommonResp中success=true即可
        @PostMapping("/save")public CommonResp save(EbookSaveReq req){CommonResp resp = new CommonResp();ebookService.save(req);return resp;}

    保存接口请求参数用XXXSaveReq

    查询接口请求参数XXXQueryReq

    查询接口返回参数用XXXQueryResp

    查询和保存,请求参数数据是不一样的
  2. POST请求,如果是以json方式提交,后端参数需要增加@RequestBody,如果是以form方式提交,则不需要加任何注解

雪花算法与新增功能

  • 时间戳概念
    2022-2-4 08:00:00 这个叫日期格式化,不叫时间戳
    时间戳一般是一个长整形

    打印当前时间 时间戳,就是与1970-01-01 08:00:00以毫秒为单位,做一个差值,与北京时间有8小时时间差

    以某一时间点为时间戳,复制到最上方起始时间
     

        /*** 起始的时间戳*/private final static long START_STMP = 1640995200000L; // 2022-01-01 00:00:00

    @Resource是jdk自带的
    @Autowired是Spring自带的

  • 雪花算法工具类
    将雪花算法工具类注入到Service中

  • 完成新增功能
    在新增中调用nextId方法
    ebook.setId(snowFlake.nextId());

    面试题:id有几种算法
    1.简单的自增
    2.uuid
    3.雪花算法

雪花算法ID,数据库和页面不一致

增加删除电子书功能

电子书管理页面,点击某一行的删除按钮时,删除该行电子书
后端增加删除接口
前端点击删除按钮时调用后端删除接口
删除时需要有一个确认框

删除一般根据id来删除,直接在路径后面加一个id,用大括号括起来,并不是mybatis参数${},直接就是{},需要在下面定义一下,@PathVariable Long id.在service中mapper调用delete主键方法

集成Validation做参数校验

添加依赖,Springboot内置,不需要添加版本号
 

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

在属性上方添加注解,校验
还需要开启校验@Valid 表示里面这组数据要开启校验

统一异常处理
BindException 有针对性的异常   validation中的BindException
Exception        无针对性异常

根据日志出现的xxxException来做统一异常处理

  • 使用方法:
  1. 实体增加校验注解
    @NotNull(message = “【每页条数】不能为空”)
    @Max(value = 100, message = “【每页条数】不能超过100”)
    protected Integer size;

  2. 接口参数增加注解@Valid,开启校验
    public CommonResp query(@Valid EbookQueryReq req)

  • 全局异常处理,使用@ControllerAdvice

电子书管理功能优化

  • 增加名字查询

  • 编辑时复制对象

面试题

  1. 什么是物理分页,什么是逻辑分页?

物理分页(后端分页):每次只从数据库查出当前页的数据,并查出总条数,前端显示页码和数据

逻辑分页(前端分页):数据一次性查询到前端,由前端根据总数据,来设置分页页码和当前页数据

适用场景:
物理分页适用于数据量大、更新频繁的场景
逻辑分页适用于数据量少、更新不频繁的场景

  1. 扩展:什么是物理删除,什么是逻辑删除?

逻辑删除 是指文件没有被真正的删除,只不过是文件名的第一个字节被改成操作系统无法识别的字符。通常这种删除操作是可逆的,就是说用适当的工具或软件可以把删除的文件恢复出来。

数据库的物理删除,直接使用delete、drop删除了表数据。

数据库的逻辑删除:通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个status字段代表所谓的“删除”状态),在逻辑上是数据是被删除的,但数据本身是依然存在的。

物理删除一定程度上删除了暂时“无用”的数据,降低了表的数据量,对性能肯定是有好处的;但是如果没有备份的话,数据很难恢复。

逻辑删除恢复的话只要修改is_deleted等类似的状态标示字段就可以了,但是表的数据量肯定会比物理删除增加了,并且查询时经常要考虑到is_deleted字段,对索引都会有影响。

  1. Mysql的分页关键字是什么?
    LIMIT关键字
    集成PageHelper插件后,在service层可直接使用
PageHelper.startPage(page, size)

page从1开始
获取分页信息

PageInfo<Ebook> pageInfo = new PageInfo<>(ebookList);
pageInfo.getTotal();
pageInfo.getPages();

PageHelper原理:Mybatis拦截器,拦截到SQL后,增加limit关键字
只对第一个遇到的SQL起作用

4.数据库ID有哪些设计方法,都有什么优缺点?
自增长ID
特点:
数值类型,值递增,由数据库内部生成
优点:
是最简单的方式,开发简单,性能优秀
缺点:
不适合分表分库场景,会出现主键冲突,ID重复,这是硬伤
会有N+1次查询问题,Java代码想获取ID,需要再查询一次


UUID
特点:
字符串类型,值没什么规律
优点:
适用于分表分库场景
UUID一般由Java代码生成,Java不需要查询就能知道ID
缺点:
性能不如自增


雪花算法
特点:
数值类型,由Twitter提供的分布式ID算法,递增
优点:
适用于分表分库场景,就是为这场景而生的
由Java代码生成,Java不需要查询就能知道ID
所有需要生成唯一ID的都可用雪花算法,比如登录token、日志编号等
缺点:
性能稍稍不如自增
生成的值较长,传递到前端number类型容易出现精度丢失,可以转成字符串解决

总结
如果是简单的小项目,可以考虑用自增ID
如果是中大型项目,推荐用雪花ID
至于UUID,因为有雪花算法的存在,所以可以放弃UUID
但是,小项目我也建议用雪花算法。以后做的项目多了,就不至于一会是自增ID,一会是雪花ID,不至于思维跳跃

6.什么是前端校验?什么是后端校验?
前端校验就是表单验证,后端校验就是接口参数校验。使用validation组件对接口请求的实体类通过NotNull等注解实现检验。

借助浏览器开发者工具,可以修改界面元素属性,比如将不可编辑变为可编辑,将不可点击变为可点击。
或者找到按钮提交的接口和请求参数,再利用接口测试工具,直接访问后端接口,完美绕过界面校验。

只做前端校验:会有安全问题
只做后端校验:会有服务器压力问题
正解:前端校验+后端校验

7.你们项目是如何处理异常的?
编写 统一异常处理类ControllerAdvice注解,ExceptionHandler注解对某种异常进行统一处理

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

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

相关文章

给你的网站增加拉姆雷姆回到顶部按钮

使用 在 footer 引入&#xff1a; <script src"https://cdn.jsdelivr.net/gh/fz6m/Private-web2.0.7/js/custom/lamu-leimu.min.js"></script>注&#xff1a;如果你的网站 / 博客还有回到顶部的按钮&#xff0c;请自行找到节点删除或者 style"dis…

react在github pages的路由匹配和vue的区别(网站子路径同理)

Vue 在 vue 部署到 github pages 时&#xff0c;我们可以借助 vue 脚手架可以读取 --mode 命令参数的特性&#xff0c;自定义一个 github 环境。 在项目根目录下建立 .env.github &#xff1a; NODE_ENV github VUE_APP_PATH /repo-name/在 package.json 添加 script &#…

给你的网站添加一个中国新年灯笼挂件(网页/博客美化)

效果 预览 实际 使用 默认 <body><!-- 在页面最后引入 --><script src"https://cdn.jsdelivr.net/gh/fz6m/china-lantern1.1/dist/china-lantern.min.js"></script></body>php <?phpdate_default_timezone_set(PRC);$year da…

利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站

看着个题目可能很玄乎&#xff0c;本来也想写的玄乎玄乎的&#xff0c;但Google了一下&#xff0c;觉得没有必要写的这么玄乎&#xff0c;其实&#xff0c;今天我就是要给大家介绍一款非常优秀的基于python(能够支持GAE)的blog程序而已&#xff0c;所以本文就言简意赅&#xff…

python关键词挖掘_seo必备工具,python采集关键词挖掘数据

采集数据来源于站长之家&#xff01; 需要输入关键词&#xff01; 引用的库 import requests from lxml import etree import re import xlwt import time例子&#xff1a; 1.etree采集列表 2.切片操作 3.保存excel格式 #站长工具关键词挖掘 # -*- codingutf-8 -*- import requ…

分享25个优秀的活动邀请网站设计案例

互联网出现以前只能用纸和笔制作简单的邀请函&#xff0c;如今婚礼、活动和会议等邀请都可以做成非常有创意的网页了。所以&#xff0c;今天本文要与大家分享的是25个优秀的活动邀请网站设计案例。 1. Herra & Viking 2. Camp Firebelly 3. Edinburg2Liverpool 4. Evening …

怎样在SharePoint 2010网站中启用匿名访问

SharePoint 2010的改动比较大&#xff0c;尤其是相对SharePoint Portal Server 2003来说。本文介绍在SharePoint 2010站点中启用匿名访问的步骤。 &#xff08;1&#xff09;你要用SharePoint 2010的“管理中心”创建一个站点&#xff0c;一般来说&#xff0c;这一步都已经创建…

weboffice 比较好的源码_源码网站和模板网站的区别

根据网站开发的方式&#xff0c;可以将网站分为源码网站和模板网站。源码网站就是指网站是全新开发的&#xff0c;全新设计&#xff0c;全新代码进行开发&#xff0c;而模板网站就相对简单&#xff0c;就是在模板的网站代码的基础上进行简单的修改和部署。对于很多客户来说&…

快站模板 连接mysql_如何轻松建站?站点一键部署搭建(详细教程)

越来越多的人选择个人建站&#xff0c;个人站长虽然门槛很低&#xff0c;但是有些朋友觉得Linux服务器各种复杂的命令脚本让自己没法搭建环境。今天就给大家推荐一款使用方便、功能强大的快速建站工具——云帮手&#xff0c;支持 Linux 与 Windows 系统&#xff0c;可一键配置搭…

防止菠菜上传PHP文件,对某菠菜网站的一次渗透测试

无意间发现一个thinkphp的菠菜站&#xff0c;最近tp不是刚好有个漏洞吗&#xff1f;然后就顺手测试了一下&#xff0c;但过程并不太顺利&#xff0c;不过最后还是拿下了&#xff0c;所以特发此文分享下思路。简单看了下&#xff0c;应该有不少人玩吧&#xff1f;正好前几天写了…

php echo表单提交_从建站打拿站 -- PHP(登录和注册)

小孩子才会喝的一塌糊涂 而我必须带着钥匙拿好手机记住回家的路。。。。---- 网易云热评在HTML基础中&#xff0c;做了两张静态页面&#xff08;登录和注册&#xff09;&#xff0c;现在我们配合PHP动态页面进行操作。一、登录页面(GET)1、action属性修改为"../php/dl.php…

网站logo服务器更换显示以前,爆料:许多老网站的站点LOGO停止显示

据买链接站长QQ爆料&#xff1a;很多老站的百度logo图片在百度搜索结果中不显示了。目前是中小网站免费的logo不在了&#xff0c;包括10几年以前排名前1.2.3名的老站。据该站长介绍说&#xff1a;我很多站长朋友老站&#xff0c;中小级别的logo都消失了&#xff0c;最近开始&am…

构建LEMP网站服务平台

Nginx 是一个很强大的高性能Web和反向代理服务器&#xff0c;它具有很多非常优越的特性&#xff1a;在高连接并发的情况下&#xff0c;Nginx是Apache服务器不错的替代品&#xff1a;Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000 个并发连接…

分享一些背景虚化背景图 适合大气、高质感的网站

2019独角兽企业重金招聘Python工程师标准>>> 一组5个高品质的散焦图像&#xff0c;为您的下一个设计项目作为覆盖或背景使用起来非常顺手。或者干脆用它们作为屏幕壁纸, 压缩包一共7M之多&#xff0c;暂时先上传几张图片&#xff0c;供大家看看货……&#xff0c;格…

【兴趣】 让人欲罢不能的15个涂鸦网站!

推荐这十几个涂鸦网站&#xff0c;它们有的纯粹好玩&#xff0c;有的对学画画有帮助&#xff0c;或者两者兼有。它们未必比游戏差&#xff0c;闲暇之余还是值得一玩哒o(〃▽〃)o 注&#xff1a; 请使用电脑登录&#xff0c;手机是玩不了的 部分网站不稳定&#xff0c;可能进不…

python爬虫登录网站_python爬虫学习,使用requests库来实现模拟登录4399小游戏网站。...

1.首先分析请求&#xff0c;打开4399网站。image 右键检查元素或者F12打开开发者工具。然后找到network选项&#xff0c;image 这里最好勾选perserve log 选项&#xff0c;用来保存请求日志。这时我们来先用我们的账号密码登陆一下&#xff0c;然后查看一下截获的请求image 可以…

安卓 默认打开权限_应对网站弹窗提醒带来的骚扰问题 谷歌浏览器将开始默认拦截通知请求...

此前谷歌浏览器带来弹窗提醒功能旨在让网站可以与用户交互&#xff0c;即便在离线状态下也可以弹出某些特定提醒内容。然而和多数功能那样提醒功能也被许多网站滥用&#xff0c;不断地弹出内容更新提示来推送广告甚至直接借助提醒发广告。即便在正常情况下用户打开某个新网站地…

cache-control_网站优化(三):缓存策略优化(CDN/动静分离/Cachecontrol)

本文是连续更新系列&#xff0c;根据《任霏博客网站程序2020年度大更新》分为网络地域选择、云服务器配置优化、环境搭建优化(JVM)、缓存策略优化、SpringBoot配置优化、前端页面优化等方面分别讨论。注&#xff1a;本文只根据我的个人经验分享&#xff0c;并非专业测评&#x…

服务器快照能代替网站备份吗,云服务器快照还需要备份吗

云服务器快照还需要备份吗 内容精选换一换云硬盘备份可为云硬盘创建备份&#xff0c;利用备份数据回滚云硬盘&#xff0c;以最大限度保证用户数据正确性和安全性&#xff0c;确保您的云硬盘安全。VBS支持全量备份和增量备份。云服务器备份会在备份过程中自动创建快照并且为每个…

与Linux相关的一些网站

2019独角兽企业重金招聘Python工程师标准>>> Mono项目的C#公共语言运行环境&#xff0c;使Linux上能运行C#程序: http://www.mono-project.com/ python官网: https://www.python.org/ perl官网: http://www.perl.org/ GTK项目主页: http://www.gtk.org/ KDE官网: ht…