尚庭公寓项目记录

 ypora激活使用指南(2024):

原文链接:https://zhuanlan.zhihu.com/p/692454473

或者:https://blog.csdn.net/qjkewdmgkq/article/details/139335063 Typora破解

项目链接:


尚硅谷Java项目【尚庭公寓】从0开始Java项目实战_哔哩哔哩_bilibili

参考链接:https://www.cnblogs.com/gaodiyuanjin/p/18623825

数据库准备

  • 保留图像时,保存图像地址就可以
  • 数据表不是越多越好,可以用中间表来实现俩个表之间的联立
  • 这样方便查数据但是却带来性能问题
  • 而减少表的jion但是提高性能,以冗余来换去性能
  • 采用MySQL,InnoDB存储引擎
  • 物理删除和逻辑删除
  • 逻辑删除有一个标记,后面会过滤掉
  • 大数据时代,数据比较重要,被删除的数据也很重要

接口定义

  • 根据页面的信息,每个模块需要什么接口,哪些可以共用一个接口
  • 但终归是增删改查,但是看需要通过什么来查询信息,是有条件还是查询全部
  • 根据ID删除属性和值,根据分页查询列表,比如嵌套的列表,省市县等
  • 上传图像功能
  • 根据ID查询房间详细信息(用作修改时的表单回显)
  • 登录功能:获取图形验证码,请求登录,获取登录用户信息
  • 增删改查,一般保存是不向后台新增ID的,该增加是有的

准备开发环境

两台Linux虚拟机

在其中一台,部署MySQL,Redis,MinIO

技术储备

MyBatis Plus快速入门

创建一个表,设置它的编码方式

CREATE DATABASE hello_mp CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

前面设定字符集,后面设定字符集的排序规则

id设置了自动增长,bigint比int有更长的字符设定

comment是对数据库对象的描述

primary是把id设置为主键

引入Maven依赖的时候,groupId一般写反向域名格式,来避免进行冲突

配置MySQL的时候,下面的URL是虚拟机的IP地址

创建实体时,Ctrl加v直接生成对应实体类

实体类注解:

通用Mapper

通用service

继承泛型接口,需要传入实体类

通过继承通用mapper接口和通用service接口

只不过方法略有区别

但是,实际上,mapper方法是封装在service接口下的

都是先定义一个接口,然后再定义一个实现类

条件构造器

MyBatis Plus共提供了两类构造器,分别是`QueryWrapper`和`UpdateWrapper`。其中`QueryWrapper`主要用于查询、删除操作,`UpdateWrapper`主要用于更新操作

QueryWrapper支持链式操作

考虑优先级的情况,匿名的子类对象可以替换成lambda表达式

LambdaWrapperTest类

传入的格式不一样

分页插件

总结:

简单的查询可以用通用Mapper和通用service

复杂的查询需要用条件构造器和分页插件

MyBatisX插件

使用它可根据数据库快速生成EntityMapperMapper.xmlServiceServiceImpl等代码

MinIO

对象存储服务

可以上传图片什么的,为其分配一个ID,即url,端点加绝对路径

Redis

概念:

基于内存储存,存储性能速度惊人,通过键值对储存,通常用作缓存服务

特点:

高性能,支持多种数据结构,持久化,灵活的数据过期策略

持久化方式:

定期快照 :有时间间隔,但是不实时,只能恢复最近的快照,容易数据丢失

实时记录写操作日志:恢复的时候比较慢,写操作太多

应用场景:

用作缓存,缓存可以显著提升访问速度,降低数据库压力。

Redis常用数据类型及命令:

通用命令

string命令

string类型常用于缓存、计数器等场景。

比如点击率什么的

list类型

  • 社交应用中,可使用list缓存每个用户发布的最新的N条记录。

一般缓存最近的十条记录

  • list可用作异步消息队列。

放到list里面的慢慢处理,一边push,一边pop

set

和list类型相似,set类型也可用来存储多个string类型的元素,但与list类型不同,set中的元素是无序的,且set中不会包含相同元素。

set可用于计算共同关注好友,随机抽奖系统等等

hash

hash类型类似于Java语言中的HashMap,可用于存储键值对。

hash类型可用于缓存对象等。

zset

zset(sorted set)被称为有序集合,同set相似,zset中也不会包含相同元素,但不同的是,zset中的元素是有序的。并且zset中的元素并非像list一样按照元素的插入顺序排序,而是按照每个元素的分数(score)排序。

zset主要用于各种排行榜。

SpringBoot整合Redis

Spring Data Redis 中有一个十分重要的类——RedisTemplate,它封装了与Redis进行的交互的各种方法,我们主要用使用它与Redis进行交互

但是出现序列化方式问题

Redis中的key和value均是以二进制的形式存储的,因此客户端输入的key和value都会经过序列化之后才发往Redis服务端。而RedisTemplate所使用序列化方式和命令行客户端采用序列化方式不相同,进而导致序列化之后的二进制数据不同,所以才会导致上述的现象。

为解决上述问题,可使用StringRedisTemplate代替RedisTemplate,因为StringRedisTemplate使用的序列化器和命令行所使用的序列化器是相同的。

spring-boot-starter-data-redis同样提供了StringRedisTemplate的自动配置,因此我们也可以直接将其注入到自己的类中。

Knife4j

Knife4j是一个用于生成和展示API文档的工具,同时它还提供了在线调试的功能

和Springboot集成,通过注解可以生成接口文档

和swagger性质差不多

项目初始化

数据库连接和SQL文件的导入

创建Maven工程

注意Maven的继承和聚合的性质

创建工程

  • 就是搭框架,包括生成API、各种插件、依赖、注解、统一管理注解和依赖版本(扫描)、返回值、响应码
  • 还有各种继承和抽象类、泛型
  • web相关依赖和test相关依赖
  • Maven,打包成可执行的JAR文件
  • 配置服务器端口,创建springboot的启动类
  • 配置Mybatis-Plus:启动类和MySQL驱动
  • 在主要模块配置Knife4j配置
  • 后台管理系统和移动端的接口配置并不相同,所以需各自编写一个配置类。
  • 在完成上述配置后,便可使用一些逆向工具自动生成基础代码了(例如实体类、mapper、service等),在使用Mybatis-Plus作为存储层框架时,推荐使用IDEA中的Mybatis X插件
  • 实体类中的公共字段(例如idcreate_timeupdate_timeis_deleted)抽取到一个基类,进行统一管理,然后让各实体类继承该基类。

  • 实体类中的状态字段(例如status)或类型字段(例如type),全部使用枚举类型。

  • 所有的实体类均实现了Serializable接口,方便对实体对象进行缓存。

  • 所有的Mapper接口均没有使用@Mapper注解,而是使用@MapperScan注解统一扫描。

公寓信息管理

    登录模块


    两种常用的认证方案:
     一.session
    在服务器端创建一个session对象将标识保存在这个对象中 
    若用户数量多 就会使服务端受压 
    借此使用负载均衡(类似中转站) 将各种不同请求发给相应的多台服务器(集群) 
    此处要使用登陆共享(即将登录的信息存储在Redis中)
    二.Token(JWT令牌)
    登陆状态保存到客户端 服务器无须保存
    客户端发起的每个请求自身携带登陆状态
    JWT是一种轻量级的安全传输方式 为一个字符串 
    由三部分组成 .分隔 header payload(负载) signature(签名)
    例如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
    eyJ1c2VybmFtZSI6Ind3dy5iZWpzb24uY29tIiwic3ViIjoiZGVtbyIsImlhdCI6MTczNDUwMDYzNywibmJmIjoxNzM0NTAwNjM3LCJleHAiOjE3MzQ1ODcwMzd9.
    HdeGpO61iaiN7ODgpNrYIXuMIJIpHJ5e6cc4UsPDd7g

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    登登登__

    期待每一份真诚

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值