图书馆-后端

2.6k words

redisson

Java语言下的Redis客户端
它还实现了很多具有分布式特性的常用工具类

使用Redisson

  1. 创建RedissonClient

    • 通过创建单机Redis服务的相关参数创建
      1
      2
      3
      4
      5
      Config config = new Config();
      // 使用单机Redis服务
      config.useSingleServer().setAddress("redis://127.0.0.1:6379");
      // 创建Redisson客户端
      RedissonClient redisson = Redisson.create(config);
  2. 获取RBucket
    RBucketbucket = redisson.getBucket(“reids_key”);

  3. 使用Redis命令

    1
    2
    bucket.get();
    bucket.set(value, expire_time, TimeUnit);

访问不同数据类型

RMap
1
2
3
RMap<String, String> studentRMap = redisson.getMap("studentMap");
studentRMap.put("name", "赵四");
studentRMap.expire(300, TimeUnit.SECONDS);
RList
1
2
RList<Student> studentRList = redisson.getList("studentList");
studentRList.add(jack);



Mapstruct

导入依赖

  • Mapstruct
  • Mapstruct-processor

两个需要互相转换的实体类

需要get(),set()方法

定义转换接口

  1. @Mapper注解
  2. Mappers.getMapper()构造INSTANCE
  3. 定义转换方法xx2xx()
1
2
3
4
5
6
@Mapper
public interface DbConverter {
DbConverter INSTANCE = Mappers.getMapper(DbConverter.class);

AddDbConnectParam req2param(AddDbConnectRequest addDbConnectRequest);
}

SQL

NOW()

返回当前日期和时间,格式’YYYY-MM-DD HH:MM:SS’(用于String类型时)

1
SELECT NOW()

CURDATE()

返回当前日期,格式’YYYY-MM-DD’(用于String类型时)

1
SELECT CURDATE()

DATE_FORMAT(date, format)

1
SELECT DATE_FORMAT('2024-10-11 15:54:04.451637','%Y-%m-%d %H:%i:%s') AS;

UUID()

生成唯一且不规则的主键id

1
SELECT REPLACE(UUID(), '-', '') 

&gt; &lt;

  • &gt; >
  • &lt; <


mybatis

根据Ids批量操作

1
2
3
4
and ID in
<foreach collection="ids" item="item" open="(" close=")" separator=",">
#{item,jdbcType=VARCHAR}
</foreach>



后端

翻译字段

需要翻译的字段
例如

  • folder_type目录类型(0:文件,1:目录)
  • status状态(0:转码中,1:转码失败,2:转码成功)

翻译对应关系用redis缓存

返回给前端的实体类多加入翻译后的字段,如folderTypeName,statusName
翻译例:folderType = 1 翻译后 folderTypeName = 目录

前端显示folderTypeName,statusName

泛型

声明<T>,使用T

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Data
public class Response<T> {

private T data;

private String code;

private String message;

public static <K> Response<K> buildSuccess(K data) {
Response<K> response = new Response<>();
response.setData(data);
return response;
}
}

类上声明的泛型类型<T>不能用于静态方法
需要另外声明,可以取不同名加以区分,例如<K>

时间序列化

1
2
@JsonFormat(locale = "zh",timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(locale = "zh",timezone = "GMT+8",pattern = "yyyy-MM-dd")
  1. XxxRequest中设置Date类型序列化,确保时间类型请求参数的正确反序列化
  2. XxxDto中设置Date类型序列化,确保时间类型响应参数的正确序列化

时间/数字类型考虑用String存

  • String存储时间类型,加入处理时间格式的逻辑
  • String存储数字类型,转换再做处理

request & response

  • 创建与销毁
    • 每次浏览器访问服务器,服务器在调用service方法处理请求之前都会创建request和response对象
    • 在请求处理完,响应结束时,服务器会销毁request和response对象。
  • 具体内容
    • request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等)
    • alt text
    • response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体)
    • alt text