收获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; }