Java

Spring Boot 服务层泛型抽象与代码复用实战

2026-06-26 #Springboot#Java#Mybatis#Vue3#Git

详解如何设计基于泛型的 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);
}

// 可写特有业务逻辑
}

📌 实践建议

  • 新增业务模块从此基类继承,避免重复实现
  • 结合分页、事务钩子方法,增强基类能力
  • 定期重构老业务代码,引入泛型抽象层

🔚 总结

服务层泛型抽象设计,减少了样板代码,提高了代码复用率和可维护性,是大型项目必备的架构实践。业务开发专注核心逻辑,极大提升团队开发效率。


🔗 项目源码地址


🙋‍♂️ 如果你觉得这篇文章有帮助:

  • 点赞 👍
  • 收藏 ⭐
  • 评论 💬
  • 关注我 👇 获取后续实战内容
评论
分享