【SpringBoot】 SpringBoot项目常用代码配置
1. MyBatis Plus
1.1 分页插件
MP的分页插件几乎每个项目都拥有,基本代码配置如下:
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
1.2 元对象处理
每个数据库表当中一般都应该拥有 创建者,修改者,创建时间,修改时间。而每一次对数据库的增,改操作都要修改这些值,无疑造成了代码的冗余。为解决这一问题,我们需要用到元对象处理。
@TableField(fill = FieldFill.INSERT)
private Long createBy;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
2. Redis
2.1 序列化器
SpringBoot中的 RedisTemplate
使用的序列化器默认为 JdkSerializationRedisSerializer
。当存入的数据key值经过此序列化器序列化后中文会乱码。我们在可视化工具上根本分不清谁是谁。所以我们需要改变 RedisTemplate
的序列化器,将其改变为 StringRedisSerializer
。
代码配置如下:
@Configuration
public class RedisConfig {
@Bean
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
{
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
FastJsonRedisSerializer serializer = new FastJsonRedisSerializer(Object.class);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);
// Hash的key也采用StringRedisSerializer的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
}
除了修改序列化器外,还可以不使用 RedisTemplate
改用 StringRedisTemplate
,效果是一样的。
3. WebMvcConfigurer
WebMvcConfigurer
是一个接口,里面拥有很多有用的方法。
定义一个配置类,实现 WebMvcConfigurer
接口。
类框架如下:
@Configuration
public class WebConfig implements WebMvcConfigurer {
//配置代码
}
3.1 跨域配置
@Override
public void addCorsMappings(CorsRegistry registry) {
// 设置允许跨域的路径
registry.addMapping("/**")
// 设置允许跨域请求的域名
.allowedOriginPatterns("*")
// 是否允许cookie
.allowCredentials(true)
// 设置允许的请求方式
.allowedMethods("GET", "POST", "DELETE", "PUT")
// 设置允许的header属性
.allowedHeaders("*")
// 跨域允许时间
.maxAge(3600);
}
3.2 消息转换器
这个方法可以将日期格式化,将Long型数据转化为字符串类型。
当数据库的主键为 雪花算法
生成的随机数时,前后端的数据交互会有问题,以为js无法存储这么长的数字,所以后端只能将其转成字符串才能成功传去前端。而前端往后端传数据时再将其转化为Long型。
@Bean
//使用@Bean注入fastJsonHttpMessageConvert
public HttpMessageConverter fastJsonHttpMessageConverters() {
//1.需要定义一个Convert转换消息的对象
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
SerializeConfig.globalInstance.put(Long.class, ToStringSerializer.instance);
fastJsonConfig.setSerializeConfig(SerializeConfig.globalInstance);
fastConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastConverter;
return converter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(fastJsonHttpMessageConverters());
}