Jua*_*ano 5 java spring jdbc spring-data spring-data-jpa
我对 Spring 的对象(以及一般的 spring-jdbc)非常熟悉JdbcTemplate,并且我非常喜欢自己编写 SQL 并处理对象映射。
然而最近我在玩这个CrudRepository界面,我真的很喜欢它。
也就是说,当涉及到复杂的查询(连接等)时,我仍然倾向于编写自己的 SQL 查询。
我希望能够CrudRepository在也有实例的类中使用这些方法JdbcTemplate,这样我就可以拥有开箱即用的方法,CrudRepository同时能够编写自己的复杂 SQL 并将它们与JdbcTemplate.
当然,问题是,这CrudRepository只是一个接口,而它JdbcTemplate是一个常规类。所以问题是
JdbcTemplate,并且还提供了 a 的实现,CrudRepository而不必过多地绕过它?在任何应用程序中混合使用 JPA 和 JDBC 是非常有可能的。可JdbcTemplate用于编写复杂的查询或进行更复杂的自定义映射。另一种选择是使用 a RowCallbackHandler(而不是RowMapper直接将某些内容流式传输到文件或其他资源,以保留内存)。
使用 Spring Data 时,您可以使用@Query注释在存储库中编写自定义查询。这可以是本机查询或 JPQL。
然而,Spring 中没有什么可以阻止您在单个类中使用两者。您可以直接将存储库注入到服务中JdbcTemplate(或者如果您愿意,也可以将其放在另一个外观后面)。
@Service
@Transactional
public class YourService {
private final YourCrudRepository repo;
private final JdbcTemplate jdbc;
public YourService(YourCrudRepository repo, JdbcTemplate jdbc) {
this.repo=repo;
this.jdbc=jdbc;
}
// Your methods go down here
}
Run Code Online (Sandbox Code Playgroud)
现在您可以同时使用两者。Spring 的好处是,无论使用CrudRepository或 ,JdbcTemplate它都会抛出相同的异常DataAccessException。如果它们在同一台上运行,DataSource则单个JpaTransactionManager就足以管理连接和事务。
| 归档时间: |
|
| 查看次数: |
3592 次 |
| 最近记录: |