JPA和SQL在Spring Boot鱼和熊掌兼得 – Billy Korando

栏目: Java · 发布时间: 6年前

内容简介: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 {
 
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C语言入门经典

C语言入门经典

霍顿 (Ivor Horton) / 清华大学出版社 / 2008-4-1 / 69.80元

本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一。本书集综合性、实用性为一体,是学习C语言的优秀入门教材,在世界范围内广受欢迎,口碑极佳。书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握的必要知识,并提供了大量的实用性很强的编程实例。本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。读者基本不需要具备任何编程知识,即可......一起来看看 《C语言入门经典》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具