[学习笔记] 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/
如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/300/
评论