一. ActiveRecord
Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
在MyBatisPlus中,AR模式即在实体类中封装了对数据库的访问,而不通过mapper类。
用法:
- 虽然操作数据库不通过mapper类,但需要编写mapper类并继承BaseMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
- 实体类继承Model类,开启AR模式
@Data
@Builder
@TableName("`user`")
public class User extends Model<User> {
@TableId(type = IdType.AUTO)
private Integer id;
private String username;
private String password;
private Boolean enabled;
}
测试crud
- 添加User
@Test
void testAdd() {
User user = User.builder()
.username("Coco")
.password(encoder.encode("123456"))
.enabled(true)
.build();
user.insert();
}
测试结果
数据库数据,成功插入
- 修改User
@Test
void testUpdate(){
User user = User.builder()
.id(5)
.username("Coffee")
.build();
user.updateById();
}
测试结果
数据库数据,成功修改
- 查询用户
查询单个用户
@Test
void testSelect(){
User user = User.builder()
.id(5)
.build();
user.selectById();
}
查询所有用户
@Test
void testSelect(){
User user = User.builder()
.build();
user.selectAll();
}
分页查询用户
@Test
void testPage(){
User user = User.builder().build();
Page<User> userPage = user.selectPage(
new Page<User>(0, 2),
new QueryWrapper<User>().orderByDesc("id")
);
userPage.getRecords().forEach(System.out::println);
}
别忘了引入分页插件
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
测试结果
- 删除用户
@Test
void testDelete(){
User user = User.builder()
.id(5)
.build();
user.deleteById();
}
二.逻辑删除
逻辑删除也就是在逻辑上将一条数据删除,使用一个字段来标识数据是否被删除的状态。
一. 全局配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: is_deleted #逻辑删除的字段
logic-delete-value: true
logic-not-delete-value: false
二. 单个配置
需要添加TableLogic注解。
@Data
@Builder
@TableName("`user`")
@AllArgsConstructor
@RequiredArgsConstructor
public class User extends Model<User> {
@TableId(type = IdType.AUTO)
private Integer id;
private String username;
private String password;
private Boolean enabled;
@TableLogic(value = "false",delval = "true")
private Boolean is_deleted;
}
三. 测试
- 查询
@Test
void testLogicDelete(){
User user = User.builder().id(1).build();
user.selectAll();
}
2. 删除
@Test
void testLogicDelete(){
User user = User.builder().id(1).build();
user.deleteById();
}