为了账号安全,请及时绑定邮箱和手机立即绑定

将 JdbcTemplate 与 CrudRepository 混合是否有意义?

将 JdbcTemplate 与 CrudRepository 混合是否有意义?

森林海 2022-10-20 17:22:12
我非常熟悉JdbcTemplateSpring 的对象(以及一般的 spring-jdbc),我真的很喜欢编写 SQL 并自己处理对象映射。不过最近我在玩这个CrudRepository界面,我真的很喜欢它。也就是说,当涉及到复杂查询(连接等)时,我仍然喜欢编写自己的 SQL 查询。我希望能够CrudRepository在也有JdbcTemplate实例的类中使用这些方法,这样我就可以拥有开箱即用的方法,CrudRepository同时能够编写自己的复杂 SQL 并将它们与JdbcTemplate.当然,问题是这CrudRepository只是一个接口,而JdbcTemplate它是一个普通类。所以问题是我提到的任何内容实际上都有意义吗?假设对 (1) 的回答是肯定的,我如何才能拥有一个具有 a 实例的类,该类JdbcTemplate还提供了一个实现,CrudRepository而不必过多地破解它?
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

在任何应用程序中混合 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

}

现在您可以同时使用两者。Spring 的好处在于,无论使用CrudRepository或 ,JdbcTemplate它都会抛出相同的异常,DataAccessException. 如果它们在同DataSource一个上运行,JpaTransactionManager则足以管理连接和事务。


查看完整回答
反对 回复 2022-10-20
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

为什么不把他们当成会员呢?


public class MyDao {

    private JdbcTemplate template;

    private CrudRepository repository;

}

当然,您需要通过所有方法,这对嘈杂很友好。Dao将是刻板印象数据访问对象。


查看完整回答
反对 回复 2022-10-20
  • 2 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号