[学习笔记] MyBatis-Plus之基础CRUD操作

# 学习 # · 2021-05-12

MyBatis-Plus CRUD之删除数据

1、在测试类中编写测试代码。

@Test
void deleteUser() {
    userMapper.deleteById(1);
}

2、运行测试查看结果。

3、逻辑删除:

(1)在数据库表中新增字段deleted,并在实体类中添加属性。

// 逻辑删除
// 使用@TableLogic注解(3.3.0版本后无需配置)
@TableLogic
private Integer deleted;

(2)修改application.yml,配置逻辑删除。

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted  # 全局逻辑删除的实体字段名
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

(3)测试删除功能:删除ID为4的数据。

(4)结论分析:执行删除操作时,不会在数据库中物理删除数据,而是更新deleted的值为1,即表示该条数据被逻辑删除。再次执行查询数据操作时,会自动排除deleted=1的数据,即未被逻辑删除的数据。


MyBatis-Plus CRUD之修改数据

1、在测试类中编写测试代码。

@Test
void updateUser() {
    User user = new User();
    user.setId(5L);
    user.setName("小红");
    user.setAge(21);
    userMapper.updateById(user);
}

2、运行测试查看结果:SQL自动拼接条件。


MyBatis-Plus CRUD之查询数据

1、根据ID查询数据:

@Test
void selectUser() {
    System.out.println(userMapper.selectById(4));
}

2、分页查询(MyBatisPlus内置分页插件):

(1)配置拦截器组件。

/**
 * @Package: com.example.config
 * @Description: MybatisPlusConfig
 * @Author 多仔
 */
@Configuration
@MapperScan("com.example.mapper")
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

(2)在测试类中编写测试代码。查询第一页数据,每页五条。

@Test
void selectPage() {
    Page<User> page = new Page<>(1,5);
    userMapper.selectPage(page,null);
    System.out.println(page);
}

(3)运行测试。


MyBatis-Plus自动填充

1、在日常开发中,一般的表都需要拥有gmt_create和gmt_modified字段,以表示创建时间和最后修改时间。在user表中添加字段,并在User实体类添加相关属性。

private Integer gmtCreate;
private Integer gmtModified;

2、在实体类属性上添加注解,标记为填充字段。

@TableField(value = "gmt_create", fill = FieldFill.INSERT)
private Integer gmtCreate;
@TableField(value = "gmt_modified", fill = FieldFill.INSERT_UPDATE)
private Integer gmtModified;

3、创建自定义实现类MyMetaObjectHandler,实现元对象处理器接口MetaObjectHandler。

/**
 * @Package: com.example.handler
 * @Description: 处理器
 * @Author 多仔
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        System.out.println(System.currentTimeMillis() / 1000);
        // 插入时的填充策略
        this.strictInsertFill(metaObject, "gmtCreate", Integer.class, Integer.parseInt(String.valueOf(System.currentTimeMillis() / 1000)));
        this.strictInsertFill(metaObject, "gmtModified", Integer.class, Integer.parseInt(String.valueOf(System.currentTimeMillis() / 1000)));
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新时的填充策略
        this.strictInsertFill(metaObject, "gmtModified", Integer.class, Integer.parseInt(String.valueOf(System.currentTimeMillis() / 1000)));
    }
}

4、运行测试。

如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/300/

评论