详解如何设计基于泛型的 BaseService + BaseServiceImpl 模板,极大减少业务层重复 CRUD 代码,提高代码可维护性和扩展性。
🎯 设计目标
- 统一定义 CRUD 接口
- 抽象公共实现,业务专注差异化
- 避免重复代码膨胀
- 提升开发效率与代码质量
🧱 代码设计
1. BaseService 接口
1 2 3 4 5 6 7
| public interface BaseService<T, ID extends Serializable> { T getById(ID id); List<T> listAll(); void save(T entity); void update(T entity); void deleteById(ID id); }
|
2. BaseServiceImpl 抽象实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public abstract class BaseServiceImpl<T, ID extends Serializable, M extends BaseMapper<T>> implements BaseService<T, ID> {
protected final M mapper;
public BaseServiceImpl(M mapper) { this.mapper = mapper; }
@Override public T getById(ID id) { return mapper.selectById(id); }
@Override public List<T> listAll() { return mapper.selectAll(); }
@Override public void save(T entity) { mapper.insert(entity); }
@Override public void update(T entity) { mapper.update(entity); }
@Override public void deleteById(ID id) { mapper.deleteById(id); } }
|
⚙️ 业务接入示例
1 2 3 4 5 6 7 8 9
| @Service public class UserServiceImpl extends BaseServiceImpl<User, Long, UserMapper> implements UserService {
public UserServiceImpl(UserMapper userMapper) { super(userMapper); }
}
|
📌 实践建议
- 新增业务模块从此基类继承,避免重复实现
- 结合分页、事务钩子方法,增强基类能力
- 定期重构老业务代码,引入泛型抽象层
🔚 总结
服务层泛型抽象设计,减少了样板代码,提高了代码复用率和可维护性,是大型项目必备的架构实践。业务开发专注核心逻辑,极大提升团队开发效率。
🔗 项目源码地址
🙋♂️ 如果你觉得这篇文章有帮助:
- 点赞 👍
- 收藏 ⭐
- 评论 💬
- 关注我 👇 获取后续实战内容