集成mybatis plus步骤
1、在pom文件中引入相关的jar包依赖
2、实现xxxMapper接口,通过此接口来操作数据持久化
3、对xxxDO实体进行注解的定义,如:数据库表名,字段的定义
4、需要修改plus默认的配置,需要实现MyBatisPlusConfig类
5、如需要自定义一个方法,需实现xxxMapper.xml,来自定义SQL。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
@Mapper
public interface UserMapper extends BaseMapper<UserDO>{
// 自定义方法
}
@Data
@TableName("user")
public class UserDO implements Serializable{/**
*
*/
private static final long serialVersionUID = 513247104806395374L;
private String username;
private String password;
private String email;
private Integer age;
private String phone;
/**
* 系统信息
*/
@TableId(type = IdType.AUTO)
private Long id;
@TableField(fill=FieldFill.INSERT)
private LocalDateTime created;
@TableField(fill=FieldFill.INSERT_UPDATE)
private LocalDateTime modified;
/**
* 创建者
*/
@TableField(fill=FieldFill.INSERT)
private String creator;
/**
* 修改者
*/
@TableField(fill=FieldFill.INSERT_UPDATE)
private String operator;
/**
* 逻辑删除 0正常,1删除
*/
@TableField(fill=FieldFill.INSERT)
private Integer status;
/**
* 版本号
*/
@Version
@TableField(fill=FieldFill.INSERT)
private Long version;
}
表中如果有version这个字段,可以用乐观锁来控制并发。
配置文件开启乐观锁
@Configuration
public class MybatisPlusConfig {
/**
* 开启乐观锁
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
/**
* 开启分页
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor=new PaginationInterceptor();
// 数据库类型
paginationInterceptor.setDbType(DbType.MYSQL);
return paginationInterceptor;
}
}
@Test
public void updateTest() {
UserDTO userDTO=new UserDTO();
userDTO.setUsername("username3");
userDTO.setPassword("password3");
userDTO.setAge(20);
userDTO.setEmail("1234@qq.com");
userDTO.setPhone("12345678900");
userDTO.setVersion(1L);
int i=userService.update(3L, userDTO);
System.out.println("save i==>"+i);
}
乐观锁使用规则
1、如果更新数据中不带有version字段:不使用乐观锁,并且version不会累加
2、如果更新字段中有version,但与数据库中不一致,更新失败。
3、如果带有version,并且与数据库中一致,更新成功,并且version会累加。
自动更新系统级字段
在表中会有一个公共的字段,如创建时间,更新时间,逻辑删除等,这些字段在每个表中都会存在
1、处理类
@Component
@Slf4j
public class CommonMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("新建时,开始填充系统级字段");
this.strictInsertFill(metaObject, "created"
,LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "modified"
,LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "creator"
,String.class, "");
this.strictInsertFill(metaObject, "operator"
,String.class, "");
this.strictInsertFill(metaObject, "status"
,Integer.class, 0);
this.strictInsertFill(metaObject, "version"
,Long.class, 1L);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("更新时,开始填充系统级字段");
this.strictUpdateFill(metaObject, "modified"
,LocalDateTime.class, LocalDateTime.now());
this.strictUpdateFill(metaObject, "operator"
,String.class, "");
}
}
2、使用@TableField注解。
网友评论