美文网首页
集成mybatis-puls

集成mybatis-puls

作者: 寂静的春天1988 | 来源:发表于2020-08-24 15:18 被阅读0次

集成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注解。

相关文章

网友评论

      本文标题:集成mybatis-puls

      本文链接:https://www.haomeiwen.com/subject/ggsnjktx.html