在 MyBatis-Plus 中,BaseMapperIService 是分层设计中的两个核心接口,分别对应数据访问层(DAO 层)和业务逻辑层(Service 层)。它们的适用场景和功能差异如下:


​1. BaseMapper:DAO 层的通用数据操作​
​适用场景​
• 简单单表 CRUD 操作

适用于直接对单表进行基础的增删改查,例如:
• 根据主键查询单条记录:selectById(id)

• 根据条件查询列表:selectList(wrapper)

• 插入或更新单条记录:insert(entity) / updateById(entity)

• 需要直接操作数据库的场景

当需要绕过业务逻辑层,直接通过 DAO 层执行原生 SQL 或动态条件查询时。

​特点​
• 零 SQL 编写:通过方法名和泛型自动生成 SQL,减少重复代码。

• 灵活性高:支持动态条件构造器 Wrapper,适用于复杂查询条件。

• 直接依赖实体类:泛型 T 对应数据库表的实体类,无需手动映射。

​示例代码​


@Mapper
public interface UserMapper extends BaseMapper<User> {}

// 使用示例
User user = userMapper.selectById(1L);
userMapper.insert(new User());



​2. IService:Service 层的业务逻辑封装​
​适用场景​
• 业务逻辑聚合

当需要组合多个 DAO 操作(如批量处理、事务控制)时,例如:
• 批量插入或更新:saveBatch(list) / updateBatchById(list)

• 分页查询:page(page, wrapper)

• 复杂条件组合查询(结合 QueryWrapperLambdaQueryWrapper)。

• 需要事务管理的场景

在 Service 层通过 @Transactional 注解声明事务边界,确保业务操作的原子性。

​特点​
• 业务方法抽象:提供 save/remove/update/get 等语义化方法,明确业务意图。

• 依赖 BaseMapper:通过组合 BaseMapper 实现功能,避免直接暴露 DAO 层细节。

• 支持扩展:可自定义业务方法,继承 IService 后按需实现。

​示例代码​


public interface UserService extends IService<User> {}

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 业务逻辑示例:批量保存并触发其他操作
    public void batchSaveWithLog(List<User> users) {
        saveBatch(users);  // 调用 IService 的批量方法
        logService.saveLogs(users);  // 附加日志操作
    }
}



​3. 核心区别与选择原则​

维度BaseMapperIService
层级DAO 层(直接操作数据库)Service 层(业务逻辑聚合)
功能范围单表基础 CRUD复杂业务逻辑、批量操作、事务控制
方法命名基于操作类型(如 insert, delete基于业务意图(如 save, remove
依赖关系独立于 Service 层依赖 BaseMapper 实现功能

​选择建议​
• 使用 BaseMapper:当需要直接操作数据库,且操作简单(如单条记录的增删改查)。

• 使用 IService:当需要组合多个数据库操作、实现事务或业务规则时。

• 混合使用:Service 层可通过继承 ServiceImpl 调用 BaseMapper 的方法,同时扩展自定义逻辑。


​4. 扩展场景​
• 自定义复杂查询:若需多表联查或动态 SQL,应在 Mapper 接口中自定义方法,而非依赖 BaseMapperIService

• 性能优化:批量操作时优先使用 IServicesaveBatch,其内部已优化批量提交逻辑。


​总结​
• DAO 层:用 BaseMapper 处理单表基础操作,保持代码简洁。

• Service 层:用 IService 封装业务逻辑,提升代码可维护性和复用性。

• 分层设计:两者结合可实现清晰的架构,避免业务逻辑与数据访问的耦合。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐