1.Mybaits plus的逻辑删除:
总所周知,mp的使用能够简化我们CURD的过程,当我们用mp删除一个数据的时候,注意一般的删除都是逻辑删除
如上,我们的DeFlag是删除标识:0代表没有删除,1代表删除了,我们如何把删除做成软删除呢?
yml里配置就行:
mybatis-plus:
global-config:
db-config:
logic-delete-field: delFlag # 指定逻辑删除字段名
logic-delete-value: 1 # 指定逻辑删除标记值
logic-not-delete-value: 0 # 指定逻辑未删除标记值
id-type: auto
2.公共字段填充:
如creatTime,updateTime这些数据,我们在insert或者update的时候就会同步修改。
如何自动设置同步更新呢?
1.我们可以先把公共属性抽成一个类:
别的类可以继承它
@Data
public class BaseDO {
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 删除标识 0:未删除 1:已删除
*/
@TableField(fill = FieldFill.INSERT)
private Integer delFlag;
}
2.持久层实体对象属性填充
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler{
@Override
public void insertFill(MetaObject metaObject) {
strictInsertFill(metaObject, "createTime", Date::new, Date.class);
strictInsertFill(metaObject, "updateTime", Date::new, Date.class);
strictInsertFill(metaObject, "delFlag",() -> 0,Integer.class);
}
@Override
public void updateFill(MetaObject metaObject) {
strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
}
}
3.对我们的敏感信息加密:
比如身份证号,家庭住址加密
ShardingSphere 提供完整、透明、安全、低成本的数据加密及脱敏解决方案。
在yml进行配置
rules:
# 数据加密存储规则
- !ENCRYPT
# 需要加密的表集合
tables:
# 用户表
t_user:
# 用户表中哪些字段需要进行加密
columns:
# 手机号字段,逻辑字段,不一定是在数据库中真实存在
phone:
# 手机号字段存储的密文字段,这个是数据库中真实存在的字段
cipherColumn: phone
# 身份证字段加密算法
encryptorName: common_encryptor
mail:
cipherColumn: mail
encryptorName: common_encryptor
# 是否按照密文字段查询
queryWithCipherColumn: true
# 加密算法
encryptors:
# 自定义加密算法名称
common_encryptor:
# 加密算法类型
type: AES
props:
# AES 加密密钥
aes-key-value: d6oadClrrb9A3GWo
4.Mybaits plus分页插件配置
@Configuration
public class DateBaseConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
这段配置的作用是将 MyBatis Plus 的分页功能集成到 Spring Boot 项目中,使得在进行数据库查询时可以方便地使用 MyBatis Plus 提供的分页查询功能,而无需手动编写分页查询的 SQL 语句。
5.信息脱敏处理
脱敏并非加密,比如手机号:123456,脱敏后查到的数据是12**56这样
/**
* 手机号脱敏反序列化
*/
public class PhoneDesensitizationSerializer extends JsonSerializer<String> {
@Override
public void serialize(String phone, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String phoneDesensitization = DesensitizedUtil.mobilePhone(phone);
jsonGenerator.writeString(phoneDesensitization);
}
}
然后对应的实体类,手机号属性
/**
* 手机号
*/
@JsonSerialize(using = PhoneDesensitizationSerializer.class)
private String phone;
这样就做到了脱敏处理。
6.SQL命令可以对数据插入并更新
@Insert("INSERT INTO t_link_access_stats (XX,XX,XX,XX) " +
"VALUES( " +
"#{linkAccessStats.XX}, #{linkAccessStats.XX}, #{linkAccessStats.XX}, #{linkAccessStats.XX})" +
" ON DUPLICATE KEY UPDATE" +
" XX = XX + #{linkAccessStats.XX}, " +
"XX = XX + #{linkAccessStats.XX}, " +
" XX = XX + #{linkAccessStats.XX};")
ON DUPLICATE KEY UPDATE:
当我们插入的key都重复了,不会执行插入操作,而是后面的 update
key存在不重复的,执行insert