mybatisplus IService 与 BaseMapper 的区别
所属分类 mybatis
浏览量 38
在 MyBatis-Plus 中,IService 和 BaseMapper 都是核心组件,用于简化数据库操作,
但它们的定位和使用场景有所不同
BaseMapper:专注于单表 CRUD 的数据访问层接口,适合简单的数据库操作
IService:基于 BaseMapper 的业务逻辑层接口,提供更丰富的业务方法和事务支持,适合复杂业务场景
在实际开发中,推荐遵循 "Service 调用 Mapper" 的分层思想:
简单查询可直接用 Mapper,复杂业务逻辑(如批量操作、事务)则通过 Service 实现
1. 层级与定位不同
BaseMapper
是 MyBatis-Plus 提供的 Mapper 层接口,直接继承自 MyBatis 的 BaseMapper,
用于定义与数据库表直接对应的 CRUD 操作方法(如 selectById、insert、update 等)
它是 数据访问层(DAO 层) 的基础,专注于与数据库的交互,方法多为单表操作的原子性 SQL 封装
IService
是 MyBatis-Plus 提供的 Service 层接口,封装了更复杂的业务逻辑操作,依赖于 BaseMapper 实现数据库交互
它属于 业务逻辑层(Service 层),提供了更多面向业务的方法(如批量操作、分页查询、条件构造器查询等),同时支持事务管理
2. 方法设计不同
BaseMapper
提供的是最基础的单表 CRUD 方法,例如:
selectById(id):根据 ID 查询
insert(entity):插入一条记录
updateById(entity):根据 ID 更新
deleteById(id):根据 ID 删除
这些方法直接映射到 SQL 操作,粒度较细
IService
在 BaseMapper 基础上封装了更高级的方法,例如:
批量操作:saveBatch(list)、updateBatchById(list)
分页查询:page(page, queryWrapper)
条件查询:list(queryWrapper)、getOne(queryWrapper)
逻辑删除:removeById(id)(需配置逻辑删除)
此外,IService 还提供了事务支持(通过 @Transactional 注解),适合处理包含多步数据库操作的业务逻辑
3. 使用方式不同
BaseMapper
需要自定义 Mapper 接口继承它,然后通过 MyBatis 的 @Mapper 注解或 XML 配置映射 SQL
@Mapper
public interface UserMapper extends BaseMapper< User> {
// 可扩展自定义方法
}
使用时直接注入 Mapper 调用方法:
@Autowired
private UserMapper userMapper;
public User getUser(Long id) {
return userMapper.selectById(id);
}
IService
需要自定义 Service 接口继承 IService,并实现一个对应的 ServiceImpl 类(继承 ServiceImpl< Mapper, Entity>)
// 接口
public interface UserService extends IService< User> {
// 可扩展自定义业务方法
}
// 实现类
@Service
public class UserServiceImpl extends ServiceImpl< UserMapper, User> implements UserService {
// 实现自定义方法
}
使用时注入 Service 调用方法:
@Autowired
private UserService userService;
public List getUsersByAge(int age) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
return userService.list(queryWrapper);
}
4. 依赖关系
IService 底层依赖 BaseMapper 实现数据库操作;
在 ServiceImpl 中,会自动注入对应的 Mapper(如 UserMapper),并通过它执行 SQL
因此,使用 IService 必须先定义好对应的 Mapper 接口
上一篇
AI知识点002-交叉熵
AI知识点解释
docker info 结果示例说明