内容简介:JPA,Java Persistence API的设计目标是使Java开发人员更容易进行数据库交互。与Spring Data JPA等库一起使用时,只需几分钟即可完成基本的数据库通信设置。Spring Data JPA在对一个或两个表执行相对简单的查询时效果很好,但是一旦开始超出这个基本复杂程度,就会变得难以处理。在实际应用程序中,一次查询三个,四个或更多表,以及在查询中执行其他复杂行为通常是必要的。不出所料,数据库围绕查询,过滤和解析大量数据进行了优化,更不用说数据库和应用程序之间的传输时间了。因此,即使
JPA,Java Persistence API的设计目标是使 Java 开发人员更容易进行数据库交互。与Spring Data JPA等库一起使用时,只需几分钟即可完成基本的数据库通信设置。
Spring Data JPA在对一个或两个表执行相对简单的查询时效果很好,但是一旦开始超出这个基本复杂程度,就会变得难以处理。在实际应用程序中,一次查询三个,四个或更多表,以及在查询中执行其他复杂行为通常是必要的。不出所料,数据库围绕查询,过滤和解析大量数据进行了优化,更不用说数据库和应用程序之间的传输时间了。因此,即使复杂查询的逻辑可以通过JPA进行细分和实现,性能要求也可能需要将该行为保持为单个查询。
Spring Data JPA使处理大量平常的数据库活动变得更加容易,但是在更复杂的行为中遇到了一些痛苦。SQL可以处理非常复杂的行为,但需要编写大量的样板代码才能进行简单的选择和插入。当然必须有一种方法可以在一致的接口背后利用JPA和 SQL 的优势吗?
Spring Data JPA提供了 创建自定义存储库接口 和实现的能力,并将它们与Spring Data JPA提供的默认 存储库 接口相结合,创建了一个复合存储库。这允许应用程序通过单个一致的接口与数据库交互。让我们逐步创建自己的复合存储库,然后在我们的应用程序中引用它。
第一步自定义接口:
定义新的接口和方法签名。在这里,我正在创建'CustomBlogRepo'接口:
<b>public</b> <b>interface</b> CustomBlogRepo { Iterable findBlogsByContent(String content); }
第二步实现接口:
接下来我们需要实现接口。在这个例子中,我使用 JdbcTemplate 来处理查询,但是在自定义存储库类中如何实现数据库行为没有任何限制。
<b>public</b> <b>class</b> CustomBlogRepoImpl implements CustomBlogRepo { <b>private</b> JdbcTemplate jdbcTemplate; <b>protected</b> CustomBlogRepoImpl(JdbcTemplate jdbcTemplate) { <b>this</b>.jdbcTemplate = jdbcTemplate; } @Override <b>public</b> Iterable findBlogsByContent(String content) { <b>return</b> jdbcTemplate.query(<font>"SELECT * FROM Blogs WHERE body LIKE ?"</font><font>, <b>new</b> Object[] { </font><font>"%"</font><font> + content + </font><font>"%"</font><font> }, <b>new</b> BlogRowMapper()); } <b>class</b> BlogRowMapper implements RowMapper { @Override <b>public</b> Blog mapRow(ResultSet rs, <b>int</b> rowNum) throws SQLException { <b>return</b> <b>new</b> Blog(rs.getLong(</font><font>"id"</font><font>), rs.getString(</font><font>"title"</font><font>), rs.getString(</font><font>"body"</font><font>)); } } } </font>
其他几个要点,默认情况下,Spring Data JPA将扫描与自定义接口名称匹配的类CustomBlogRepo以及“Impl”的后缀名,这就是为什么这里实现名称一定要写成CustomBlogRepoImpl这个名字的原因。 如果需要,可以自定义此行为 。此外,实现类还必须位于Spring Data JPA扫描存储库的包中。这也是可配置的,如前面的链接所示。
最后,我们需要使用我们创建的定制接口扩展相应的Repository接口。这是一个示例:
<b>public</b> <b>interface</b> CustomBlogRepo <b>extends</b> CrudRepository, CustomBlogRepo { }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 鱼和熊掌如何兼得?基于强化学习的多尺度信息传播预测
- 鱼与熊掌得兼:Hibernate与Mybatis共存
- Oracle与Hadoop对比:一致性和高性能不可兼得!
- 蝉知企业门户系统 7.4 稳定版正式发布,集成熊掌号功能!
- 数字与模拟可兼得:清华可重构计算团队发表数模混合AI芯片
- CVPR2020 | 阿里达摩院自动驾驶新成果,3D物体检测精度与速度的兼得
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通Git(第2版)
Scott Chacon、Ben Straub / 门佳、刘梓懿 / 人民邮电出版社 / 2017-9 / 89.00元
Git 仅用了几年时间就一跃成为了几乎一统商业及开源领域的版本控制系统。本书全面介绍Git 进行版本管理的基础和进阶知识。全书共10 章,内容由浅入深,展现了普通程序员和项目经理如何有效利用Git提高工作效率,掌握分支概念,灵活地将Git 用于服务器和分布式工作流,如何将开发项目迁移到Git,以及如何高效利用GitHub。一起来看看 《精通Git(第2版)》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
正则表达式在线测试
正则表达式在线测试