ActiveRecord 是一种实体对象直接操作数据库的开发模式,核心思想是:一个实体类对应一张表,一个对象对应一行数据。 在 MyBatis-Plus 中,只需让实体继承 Model,就能直接调用 CRUD,无需注入 Mapper / Service,代码极度简洁。
ActiveRecord(AR):领域模型 == 数据访问对象,实体自带 CRUD 能力。
MyBatis-Plus 实现:实体继承 Model<T> 即可拥有 CRUD 方法。
前提:必须存在对应 Mapper 并继承 BaseMapper<T>(Spring 能扫描到即可)。
继承
Model<T>
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
@Data
public class User extends Model<User> {
private Long id;
private String name;
private Integer age;
private String email;
}public interface UserMapper extends BaseMapper<User> {
}注意: 不需要在业务类中 @Autowired 注入 Mapper,AR 内部会自动获取。
User user = new User();
user.setName("张三");
user.setAge(20);
user.setEmail("test@qq.com");
// 插入
boolean success = user.insert();User user = new User();
user.setId(1L);
User result = user.selectById();支持 Wrapper
List<User> userList = new User().selectList(
Wrappers.<User>lambdaQuery()
.eq(User::getAge, 20)
);User user = new User();
user.setId(1L);
user.setName("李四");
boolean success = user.updateById();boolean success = new User().update(
Wrappers.<User>lambdaUpdate()
.set(User::getName, "王五")
.eq(User::getId, 1L)
);User user = new User();
user.setId(1L);
boolean success = user.deleteById();boolean success = new User().delete(
Wrappers.<User>lambdaQuery()
.eq(User::getAge, 18)
);// 查询所有
List<User> users = new User().selectAll();
// 计数
long count = new User().selectCount(null);selectById():根据 ID 查询
selectOne(Wrapper):查询单个
selectList(Wrapper):查询列表
selectCount(Wrapper):查询总数
selectAll():查询全部
insert():插入
updateById():根据 ID 更新
update(Wrapper):条件更新
deleteById():根据 ID 删除
delete(Wrapper):条件删除
代码极简:实体直接调用,无需注入 Mapper/Service
语义直观:user.insert()、user.updateById() 见名知意
适合快速开发:简单 CRUD 效率极高
兼容 Wrapper:复杂条件依然可用 Lambda 构造器
不适合复杂业务:多表联查、事务、复杂逻辑不推荐
可读性在大项目中下降:业务逻辑散落在实体调用中
违反单一职责原则:实体既做数据载体又做数据访问
必须提供对应的 Mapper 即使不注入,也必须定义并让 Spring 扫描到,否则抛异常。
主键必须正确配置 @TableId 必须标注,否则 AR 无法识别 ID。
updateById() 必须 setId 否则 MP 不知道更新哪一行。
AR 底层还是调用 BaseMapper 性能与普通 Mapper 调用完全一致,只是语法糖。
事务控制不变 方法上加 @Transactional 即可。
后台管理系统简单 CRUD
原型开发、快速迭代
单表操作极多的场景
不推荐:复杂查询、多表联查、高并发核心业务。