当前位置: 首页 > news >正文

Spring注解之@Repository

Spring注解之@Repository

  • Spring注解之@Repository
    • 1、核心功能与特点
      • (1)将类注册为Bean
      • (2)异常转换
      • (3)作为持久层标记
    • 2、工作原理
    • 3、示例
    • 4、总结

Spring注解之@Repository

@Repository 是Spring框架下用于 数据访问层(DAO,Data Access Object)的专用注解,它标记的类负责与数据库、文件系统,外部API等进行交互,包括存储、查找、更新、删除等操作。


1、核心功能与特点

(1)将类注册为Bean

@Repository 内部包含一个 @Component 注解,因此会被Spring的组件扫描机制自动检测并注册为Bean


(2)异常转换

@Repository 自动将底层数据访问(如 JDBC、JPA、Hibernate)抛出的异常转换为Spring 的统一数据访问异常体系(DataAccessException 及其子类)。通过这种转换,开发者可以在上层Service层对异常进行统一处理,异常处理与具体数据访问技术解耦,简化处理逻辑。


(3)作为持久层标记

划分应用层次结构(Controller → Service → Repository),提高代码可读性和可维护性。


2、工作原理

@Repository 注解标记的类会被 @ComponentScan 检测并注册为Bean。通过 PersistenceExceptionTranslationPostProcessor 后处理器实现,代理所有 @Repository 注解的类,当该Bean的方法中抛出持久层相关的异常,代理会捕获并转换为 Spring 的异常体系,这样在上层可以简化对异常的处理逻辑,简化代码。

  • 对于 JPA:自动处理 PersistenceException
  • 对于 JDBC:转换 SQLException
  • 对于 Hibernate:处理 HibernateException

3、示例

public interface UserRepository {User findById(Long id);List<User> findAll();User save(User user);void deleteById(Long id);
}

Repository层

@Repository("jdbcUserRepository")
public class JdbcUserRepository implements UserRepository {private final JdbcTemplate jdbcTemplate;@Autowiredpublic JdbcUserRepository(DataSource dataSource) {this.jdbcTemplate = new JdbcTemplate(dataSource);}@Overridepublic User findById(Long id) {// method body...}
}

Service层

@Service
public class UserService {@Autowired@Qualifier("jdbcUserRepository")private final UserRepository userRepository;public User getUserProfile(Long userId) {return userRepository.findById(userId);}public User registerUser(User newUser) {try {User user = userRepository.findById(userId);user.setEmail(newEmail);userRepository.save(user);} catch (DataAccessException ex) {// 统一处理所有数据访问异常log.error("数据库操作失败: {}", ex.getMessage());throw new ApplicationException("用户注册失败,请稍后再试", ex);}}
}

4、总结

注解层级用途
@Controller控制层处理 HTTP 请求和响应,后端调用Service层
@Service业务逻辑层业务逻辑处理,事务管理
@Component通用通用组件,不属于上述任何层
@Configuration通用通用组件,不属于上述任何层
@Repository数据访问层数据访问操作,数据库交互

@Repository 注解明确标记数据访问组件,屏蔽不同持久化技术的异常差异,使数据访问代码更加健壮、可维护。

http://www.dtcms.com/a/265596.html

相关文章:

  • 采样点不一致:总线通信的隐形杀手
  • C++之红黑树认识与实现
  • Go应用容器化完全指南:构建最小化安全镜像的终极实践
  • Jenkins的最佳替代方案TeamCity:优势、差异对比及常见问题解答
  • 使用 HiveMQ Broker 写入 TDengine
  • C#,VB.NET从JSON数据里提取数组中的对象节点值
  • 【论】电力-交通融合网协同优化:迎接电动汽车时代的挑战
  • .NET 8.0 Redis 教程
  • Pytorch中expand()和repeat()函数使用详解和实战示例
  • github在线图床
  • 一篇文章掌握Docker
  • Redis 持久化详解、使用及注意事项
  • 关于使用cursor tunnel链接vscode(避免1006 issue的做法)
  • ASP 安装使用教程
  • ubuntu rules 使用规则
  • 什么是VR全景展示?VR展示需要哪些科技?
  • 【React Native原生项目不能运行npx react-native run-android项目】
  • 学习设计模式《十六》——策略模式
  • 安装 Docker Compose!!!
  • 蒙特卡洛方法:随机抽样的艺术与科学
  • SSL Pinning破解实战:企业级移动应用安全测试方案
  • java集合详解
  • 论文阅读笔记——Autoregressive Image Generation without Vector Quantization
  • 当材料研发遇上「数字集装箱」:Docker如何让科研效率「开挂」?
  • 【unity游戏开发——优化篇】使用Occlusion Culling遮挡剔除,只渲染相机视野内的游戏物体提升游戏性能
  • AES密码算法的C语言实现(带测试)
  • 经典灰狼算法+编码器+双向长短期记忆神经网络,GWO-Transformer-BiLSTM多变量回归预测,作者:机器学习之心!
  • 【TTS】2024-2025年主流开源TTS模型的综合对比分析
  • 仿星露谷物语开发总结VIP(Unity高级编程知识)
  • RabbitMQ 通过HTTP API删除队列命令