HSAF实战收获

文章详细介绍了MySQL中的timestamp类型对应Java的TimeStamp,@TableField注解在MyBatis-Plus中的作用,如何处理非数据库字段。同时讲解了Java实现序列化的目的和serialVersionUID的作用。还阐述了分页查询的基本参数pageNo和pageSize,以及如何进行Redis的密码设置和使用,包括对象与List的存储方式以及配置类的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

收获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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

好运仔dzl

打赏有用的话还要工作干嘛

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

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

打赏作者

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

抵扣说明:

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

余额充值