《Spring 5 官方文档》14.DAO support
来源:互联网 发布:微博个性域名是什么 编辑:程序博客网 时间:2024/06/06 10:58
《Spring 5 官方文档》14.DAO support
原文链接 译者:fangzongzhou
14. DAO支持
14.1 介绍
在Spring中数据访问对象(DAO)旨在使JDBC,Hibernate,JPA或JDO等数据访问技术有一致的处理方法,并且方法尽可能简单。
这样就可以很容易地切换上述持久化技术,并且切换过程无需担心每种技术的特有异常。
14.2 一致的异常层级
Spring为技术特定异常提供了一个适当的转化,例如:SQLException 所属异常类层级用DataAccessException 作为根异常,这些异常包括了原来的异常,所以不会有丢失可能出错信息的风险。
除了JDBC异常,Spring也包含了Hibernate特定异常,将它们转换为一组集中的运行时异常(对JDO 和 JPA 异常也是如此),在合适的层次上处理多数不可恢复的持久化异常,而不会在dao上产生繁琐的catch-throw块和异常声明(仍然可以在认为合适的地方捕获和处理异常)。向上面提到的一样,JDBC异常(包括数据方言)也都转化为相同的层级结构,意味着在一个统一的项目模型中你也可以执行一些JDBC操作。
以上列举的Spring的各种模板类支持各种ORM框架。如果使用基于拦截器的类,那么我们的程序必须关心并处理HibernateExceptions和JDOExceptions本身,最好是通过分别授权给SessionFactoryUtils’ `convertHibernateAccessException(..)或 convertJdoAccessException()方法。这些方法将这些异常转化为与org.springframework.dao中异常层级兼容的异常。由于JDOExceptions 没有被检查,它可以被简单的抛出,这也牺牲了DAO在异常上的抽象。
下图展示了Spring提供的异常层级,(请注意:在这张图上显示出来的类层级仅仅是整个DataAccessException 的一个子集)
14.3 配置 DAO 或 Repository 类的注解
使用@Repository注解是数据访问对象(DAOs)或库能提供异常转换的最好方式,这个注解还允许组件扫描,查找并配置你的 DAOs 和库,并且不需要为它们提供 XML 配置文件。
1
@Repository
2
public
class
SomeMovieFinder
implements
MovieFinder {
3
// ...
4
}
任何DAO或库实现都需要访问持久的源,依赖于持久化技术的使用;例如:一个基于JDBC的库需要访问一个JDBC DataSource,一个基于JPA的库需要访问一个 EntityManager,最简单的方式就是使用 @Autowired, @Inject, @Resource 或@PersistenceContext 这些注解中的一个完成资源的依赖注入,这是一个JPA库的例子:
1
@Repository
2
public
class
JpaMovieFinder
implements
MovieFinder {
3
4
@PersistenceContext
5
private
EntityManager entityManager;
6
7
// ...
8
9
}
如果你使用传统的Hibernate API,你可以注入SessionFactory:
01
@Repository
02
public
class
HibernateMovieFinder
implements
MovieFinder {
03
04
private
SessionFactory sessionFactory;
05
06
@Autowired
07
public
void
setSessionFactory(SessionFactory sessionFactory) {
08
this
.sessionFactory = sessionFactory;
09
}
10
11
// ...
12
13
}
最后一个例子我们将在这里展示典型的JDBC支持,你将会在初始化方法中注入 DataSource ,
在初始化方法中,你将使用这个DataSource创建一个JdbcTemplate 和其他与SimpleJdbcCall相似的数据访问支持类。
01
@Repository
02
public
class
JdbcMovieFinder
implements
MovieFinder {
03
04
private
JdbcTemplate jdbcTemplate;
05
06
@Autowired
07
public
void
init(DataSource dataSource) {
08
this
.jdbcTemplate =
new
JdbcTemplate(dataSource);
09
}
10
11
// ...
12
13
}
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址:《Spring 5 官方文档》14.DAO support
- 《Spring 5 官方文档》14.DAO support
- 《Spring 5官方文档》-JMX
- Spring 4 官方文档学习(⑦)Web MVC 框架之HTTP caching support
- 【Java.Spring.DataAccess】DAO/Repository Support
- 《Spring 5 官方文档》20. CORS 支持
- 《Spring 5官方文档》11集成测试
- 《Spring 5 官方文档》20. CORS 支持
- 《Spring 5 官方文档》4. 资源
- 《Spring 5 官方文档》整合EJB
- 《Spring 5 官方文档》26. JMS
- 《Spring 5 官方文档》整合EJB
- spring官方文档
- Spring 官方文档彩蛋
- spring 官方文档
- Spring官方文档翻译
- Spring官方文档重读
- Spring 5 官方文档》1. Spring入门指南
- 《Spring 5 官方文档》6.Spring表达式语言
- 54、tensorflow手写识别的高级版本
- 人工智能(三)上——通过搜索进行问题求解
- [LeetCode]根据树的遍历还原树(1)
- 72、salesforce call RESTful 的方式
- 73、salesforce通过JAVA来Call在salesforce中已经写好的Restful处理接口
- 《Spring 5 官方文档》14.DAO support
- 74、Salesforce的String的format方法
- 75、python学习第一篇
- 抽奖
- 76、python学习第二篇
- 关于JMeter的CSV Data Set Config的源码改写(包括了部分界面等代码的分析)
- 77、tensorflow手写识别基础版本
- 78、tensorflow滑动平均模型,用来更新迭代的衰减系数
- 79、tensorflow计算一个五层神经网络的正则化损失系数、防止网络过拟合、正则化的思想就是在损失函数中加入刻画模型复杂程度的指标