收获1:MySQL数据类型对应Java类型表格
这里的timestamp类型在Java中对应TimeStamp类型,varchar和char都是对饮的String类型
收获2:@TableField
@TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错。
@TableField(exist = false)
private Integer ticketNumber;
在 MyBatis-Plus 中,@TableField 注解用于指定 Java 类字段和表列之间的映射。此注解的 updateStrategy 属性可用于指定在更新操作期间如何处理该字段。
该更新策略属性可以采用5种可能的值:
收获3:实体类中如何自动生成serialVersionUID
为什么要实现序列化接口Serializable?
答:实现序列化接口Serializable的目的是为了类可持久化,Java中的序列化机制能够将一个实例对象信息写入到一个字节流中(只序列化对象的属性值,而不会去序列化方法),序列化后的对象可用于网络传输(远程),或者持久化到数据库、磁盘中(本地存储)。为系统的分布和异构部署提供先决条件。若没有序列化,现在我们所熟悉的RPC(Remote Procedure Call,远程调用),对象数据库都不可能存在。
serialVersionUID是干什么用的?
serialVersionUID适用于java序列化机制。简单来说,JAVA序列化的机制是通过判断类的serialVersionUID来验证的版本一致的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID于本地相应实体类的serialVersionUID进行比较。如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本一致的异常,即是InvalidCastException。
教程:https://blog.csdn.net/weixin_42218169/article/details/123525504
收获4:分页查询的参数
分页查询需要传入两个参数:pageNo (每页的页码)和pageSize (每页显示的条数),通过这个两个参数可以算出当前页的起始索引 index=(pageNum-1)*pageSize,举个例子
pageSize=4,pageNum=1,index=0 limit (0,4)
收获5:给Redis设置临时密码
先打开服务端
再打开客户端
注意顺序不能错,不然会报错,然后输入
config set requirepass 123(自定的密码)
auth 123 (自定的密码)
例如
注意:这样设置只是临时的密码,关闭服务端后密码就失效了
收获6:使用Redis
首先添加配置类进行序列化
package cn.hsa.xxx.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.session.data.redis.config.ConfigureRedisAction;
/**
* @author 骚戴
*/
@Configuration
public class RedisConfig {
@Bean
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
/**
* 设置RedisTemplate规则(默认的是把对象转成二进制存储到Redis,配置了这个后就是Json格式存储)
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//序列号key value
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
使用Redis存储单个对象内容
@Resource
private RedisTemplate redisTemplate;
redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES);
public static final String ALL_CLASS_KEY = "DEMO:ALL:CLASS";
代码演示
@Override
public ClassDTO add(ClassDTO classDTO) {
ClassDO classDO = classDTOConverter.convertToClassDO(classDTO);
classDO.setCreateTime(new Timestamp((new Date()).getTime()));
classDO.setUpdateTime(new Timestamp((new Date()).getTime()));
classDO.setClassUuid(String.valueOf(idGenerator.next(RedisConstans.CLASS_ID_KEY)));
classDAO.addClass(classDO);
String key = RedisConstans.CLASS_KEY + ":" + classDO.getClassUuid();
redisTemplate.opsForValue().set(key, classDO,5, TimeUnit.MINUTES);
return classDTOConverter.convertToClassDTO(classDO);
}
使用Redis存储List集合
/**
* 分页查询
* @param pageNo 每页的页码
* @param pageSize 每页显示的条数
* 当前页的起始索引 index=(pageNum-1)*pageSize
* 举例
pageSize=4,pageNum=1,index=0 limit (0,4)
*/
@Override
public List<ClassDTO> getAll(Integer pageNo, Integer pageSize) {
PageHelper.startPage(pageNo,pageSize);
String key = RedisConstans.ALL_CLASS_KEY + ":" + pageNo;
if (redisTemplate.hasKey(key)){
List<ClassDO> classDOList = (List<ClassDO>) redisTemplate.opsForValue().get(key);
List<ClassDTO> classDTOList = new ArrayList<>();
for (ClassDO classDO : classDOList) {
classDTOList.add(classDTOConverter.convertToClassDTO(classDO));
}
return classDTOList;
}
List<ClassDO> classDOList = classDAO.getAll();
List<ClassDTO> classDTOList = new ArrayList<>();
for (ClassDO classDO : classDOList) {
classDTOList.add(classDTOConverter.convertToClassDTO(classDO));
}
redisTemplate.opsForValue().set(key,classDOList);
return classDTOList;
}