详解如何设计基于泛型的
BaseService
+BaseServiceImpl
模板,极大减少业务层重复 CRUD 代码,提高代码可维护性和扩展性。
🎯 设计目标
- 统一定义 CRUD 接口
- 抽象公共实现,业务专注差异化
- 避免重复代码膨胀
- 提升开发效率与代码质量
🧱 代码设计
1. BaseService 接口
java
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 抽象实现
java
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);
}
}
⚙️ 业务接入示例
java
@Service
public class UserServiceImpl extends BaseServiceImpl<User, Long, UserMapper> implements UserService {
public UserServiceImpl(UserMapper userMapper) {
super(userMapper);
}
// 可写特有业务逻辑
}
📌 实践建议
- 新增业务模块从此基类继承,避免重复实现
- 结合分页、事务钩子方法,增强基类能力
- 定期重构老业务代码,引入泛型抽象层
🔚 总结
服务层泛型抽象设计,减少了样板代码,提高了代码复用率和可维护性,是大型项目必备的架构实践。业务开发专注核心逻辑,极大提升团队开发效率。
🔗 项目源码地址
- GitHub:gitee.com/codevibe/gr...
- Axios 封装、前后端对接代码已上传,支持一键部署体验
🙋♂️ 如果你觉得这篇文章有帮助:
- 点赞 👍
- 收藏 ⭐
- 评论 💬
- 关注我 👇 获取后续实战内容