在数据库中,如果多个事务同时对一个数据进行操作,并发的操作若不加控制,可能会读取和存储不正确的数据,破坏数据库的一致性、脏读、不可重复读、幻读等、甚至可能产生死锁。
为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控制是一个好的方案。
在Mybatis-Plus中有自己的锁定义,用
@Version注解实现乐观锁。
在数据库中的表增加一列version时,在实体类上添加@Version注解,当对此表实现一次修改时,version就会加1,当其他人跟你同时操作一张表
你修改后version变为2,他的修改就会出错。防止了同时操作产生的错误。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String username;
private String password;
@Version
private int version;
}
悲观锁的定义为,当你对一张表操作的时候,别人无法获取这张表。
代码生成器
FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> {
builder.author("LeeGaKi") // 设置作者
//.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("") // 设置父包名
.moduleName("") // 设置父包模块名 生成的为父包名.模块
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("表名") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();