核心注解使用
MyBatis-Plus是一个基于MyBatis框架的增强工具,提供了一系列简化和增强的功能,用于加快开发人员在使用MyBatis进行数据库访问时的效率。
MyBatis-Plus提供了一种基于注解的方式来定义和映射数据库操作,其中的注解起到了重要作用。
@TableName注解
@TableName("user") //当数据库的表名和实体类名不同时使用(忽略大小写) 指定数据库表名
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
mybatis-plus:
global-config:
db-config:
table-prefix: t_ #所有数据库表名前缀 可以不用逐一配置@TableName("")
@TableId 注解
@TableId
注解是必要的:@TableId
注解来指定实体类中表示主键的字段。@TableId
注解,并通过value
属性指定生成策略。雪花算法(Snowflake Algorithm)是一种用于生成唯一ID的算法。它由Twitter公司提出,用于解决分布式系统中生成全局唯一ID的需求。
//@TableId(type= IdType.AUTO) //主键自增长
private Long id;
mybatis-plus:
global-config:
db-config:
id-type: auto #全局的主键设置为自增长
@TableField
@TableField(value="name",exist = true)
private String name;
MyBatis-Plus高级扩展
逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
@TableLogic //该属性对应的列为逻辑删除的状态字段
private Integer deleted;
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted #全局设置逻辑删除字段
乐观锁实现
乐观锁和悲观锁是在并发编程中用于处理并发访问和资源竞争的两种不同的锁机制!!
悲观锁:
悲观锁的基本思想是,在整个数据访问过程中,将共享资源锁定,以确保其他线程或进程不能同时访问和修改该资源。悲观锁的核心思想是"先保护,再修改"。在悲观锁的应用中,线程在访问共享资源之前会获取到锁,并在整个操作过程中保持锁的状态,阻塞其他线程的访问。只有当前线程完成操作后,才会释放锁,让其他线程继续操作资源。这种锁机制可以确保资源独占性和数据的一致性,但是在高并发环境下,悲观锁的效率相对较低。
乐观锁:
乐观锁的基本思想是,认为并发冲突的概率较低,因此不需要提前加锁,而是在数据更新阶段进行冲突检测和处理。乐观锁的核心思想是"先修改,后校验"。在乐观锁的应用中,线程在读取共享资源时不会加锁,而是记录特定的版本信息。当线程准备更新资源时,会先检查该资源的版本信息是否与之前读取的版本信息一致,如果一致则执行更新操作,否则说明有其他线程修改了该资源,需要进行相应的冲突处理。乐观锁通过避免加锁操作,提高了系统的并发性能和吞吐量,但是在并发冲突较为频繁的情况下,乐观锁会导致较多的冲突处理和重试操作。
理解点: 悲观锁和乐观锁是两种解决并发数据问题的思路,不是具体技术。
//乐观锁版本号插件
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
@Version
private Integer Version; //版本号字段
public void test(){
User user1=userMapper.selectById(3);
User user2=userMapper.selectById(3);
user1.setAge(50);
user2.setAge(51);
userMapper.updateById(user1);
userMapper.updateById(user2); //乐观锁生效,修改失败
防全表更新和删除实现
//防止全表更新和删除实现拦截器
mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
//全表删除
userMapper.delete(null); //会报错
MyBatis-Plus代码生成器(MyBatisX插件)