fiction中文网后端代码分析
前言
主要记录我在开发这个小说网项目的使用的代码块,方便忘记之后复用和分析
排行榜查询实现开发日志
查询
Mapper层和xml层
1 | IPage<Fiction> selectTopFictionsByClick(Page<?> page); |
1 |
|
业务层
1 | public IPage<Fiction> getTopFictionsByClick() { |
视图层
要将 IPage<Fiction>
转换为 List<Fiction>
,你可以使用 IPage
接口提供的方法 getRecords()
来获取数据列表。getRecords()
方法返回一个包含查询结果的列表。以下是一个示例代码:
1 | javaCopy codeIPage<Fiction> fictionPage = fictionService.getTopFictionsByClick(); |
上述代码首先从 fictionService.getTopFictionsByClick()
方法中获取 IPage<Fiction>
对象 fictionPage
,然后使用 getRecords()
方法将其转换为 List<Fiction>
对象 fictionList
。
现在你可以通过 fictionList
变量来访问查询结果的列表数据,并进行后续的操作。
需要注意的是,如果 IPage<Fiction>
对象 fictionPage
中的查询结果数据量较大,可能会涉及到分页查询,而不是一次性将所有数据加载到内存中。在这种情况下,fictionList
只包含当前分页的数据,如果需要获取所有数据,请根据具体的需求进行相应的处理。
查到数据后再进行写入到分出来的两个表
List
转化实体
要将 List<Fiction>
转换为 List<FictionClick>
,你需要创建一个新的 List<FictionClick>
,并遍历原始的 List<Fiction>
,将每个 Fiction
对象转换为 FictionClick
对象,然后添加到新的列表中。以下是一个示例代码:
1 | javaCopy codeList<Fiction> fictionList = ... // 原始的 Fiction 对象列表 |
上述代码假设你已经有一个原始的 Fiction 对象列表 fictionList
,然后创建一个新的 FictionClick 对象列表 fictionClickList
。通过遍历原始列表,将每个 Fiction 对象转换为 FictionClick 对象,并设置相应的属性值,最后将 FictionClick 对象添加到新的列表中。
根据你的实际情况,可能需要根据 Fiction 和 FictionClick 类的属性进行相应的转换操作。上述代码仅提供了一个基本的示例,你需要根据实际情况进行适当的修改和调整。
请注意,转换过程需要确保 Fiction 和 FictionClick 类的属性名称和类型匹配,以及确保 FictionClick 类有与 Fiction 类相应的属性。
覆盖之前的数据
如果你想使用 MyBatis-Plus 的 saveBatch
方法将 FictionClick 对象列表保存到数据库,并在遇到重复数据时按照书籍 ID 进行覆盖更新,你可以使用 saveOrUpdateBatch
方法来实现。
saveOrUpdateBatch
方法可以将列表中的数据批量保存到数据库,并在遇到重复数据时进行覆盖更新。在此过程中,它会根据实体对象的主键进行判断,如果主键存在,则执行更新操作;如果主键不存在,则执行插入操作。
以下是示例代码:
1 | javaCopy codeList<FictionClick> fictionClickList = ... // FictionClick 对象列表 |
上述代码假设你已经有一个 FictionClick 对象列表 fictionClickList
,然后使用 fictionClickService
对象的 saveOrUpdateBatch
方法将列表中的数据保存到数据库中,并在遇到重复数据时进行覆盖更新。
请注意,在使用 saveOrUpdateBatch
方法进行覆盖更新时,要确保 FictionClick 对象的主键 fictionId
在数据库中是唯一的,且存在对应的记录。如果数据库中不存在相应的记录,那么将会执行插入操作而不是更新操作。
确保在使用 saveOrUpdateBatch
方法之前已经正确配置了数据库连接和 MyBatis-Plus 的相关设置,包括正确的数据源、实体类与数据库表的映射关系等。
应该按照分类进行排序
1 | <?xml version="1.0" encoding="UTF-8" ?> |
最后优化
这个地方可以package com.example.fiction.Service.impl
可以改排行榜每次更新多少条数据 默认各写30条
出现一个bug(已解决)
没有考虑到书本如果有新的加入 就会超过30本,后期优化吧,思路应该将数据库的条数定死,覆盖写,应该每次清空数据库的条数
写了一个每次清空数据库 但是性能消耗好像更大了
权限控制
这里使用的是一个轻量级的框架 sa-token 主要的配置步骤看官方文档
时间获取当前
1 | 前提条件是传入的是这个user |
1 | // 获取当前时间 |
@RequestParam 和@RequestBody 的区别
@RequestParam
和 @RequestBody
是 Spring MVC 中常用的注解,用于处理 HTTP 请求中的参数。它们的主要区别如下:
- 用法和位置:
@RequestParam
用于从请求的 URL 或请求参数中获取单个或多个参数值。@RequestBody
用于从请求的消息体中获取请求的内容,通常用于接收 POST、PUT 等请求方法的请求体。
- 数据来源:
@RequestParam
获取参数值的来源可以是 URL 路径、查询字符串或表单数据等。@RequestBody
获取请求体中的内容,通常是 JSON、XML 或其他自定义的请求格式。
- 参数绑定方式:
@RequestParam
默认使用查询参数绑定方式,将请求参数绑定到方法的参数上。@RequestBody
使用消息转换器(Message Converter)将请求体的内容转换为方法参数的对象。
- 数据类型:
@RequestParam
可以绑定基本数据类型(如 String、int、boolean 等)以及复杂对象(如自定义类)。@RequestBody
通常用于绑定复杂对象(如 JSON 对象)到方法参数的自定义类。
全局异常拦截器
1 |
|