spring-data-jpa Spring Data jpa,外部化原生查询

kg7wmglp  于 2022-11-10  发布在  Spring
关注(0)|答案(4)|浏览(276)

我正在使用Spring data jpa来执行原生Query,下面是一个示例。

@Query(value = "select name from customer", nativeQuery = true) 
public List<String> findNameNative() ;

现在,由于公司的限制,不能将整个查询放在这里,但查询相当大,像100行。
N我们有许多这样的查询。
有没有一种方法我可以定义查询在一个单独的文件,如xml或属性文件,并引用他们在这里。(以保持代码干净)
感谢你的帮助

  • 谢谢-谢谢
pb3skfrl

pb3skfrl1#

经过多次努力和尝试找到了解决办法。
1)在项目的resources文件夹中创建xml文件(任何名称),在resources /query中输入testSQL.xml
2)遵循testSQL.xml中“orm.xml”的xml标准,此副本粘贴标头并创建以下内容的标记:

<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<named-native-query>
</named-native-query>
</entity-mapping>

3)在此xml中,创建带有named-native-query标记的标记。

<named-native-query name="XyzEntity.methodName">
<query>
<! [CDATA[
Your native query
] ] >
</query>
</named-native-query>

注意-〉可以添加多个这样的本地命名查询标记,并且所有这些标记必须位于

<entity-mapping> </entity-mapping>

4)在上面步骤中在名称标记中提到“XyzEntity”应该有一个Jpa存储库,且在该存储库中,我们应该有与标记同名的方法。

public interface XyzRepo extends JpaRepository <XyzEntity, Long> {
Tuple methodName() ;

}
5)在应用程序属性文件中添加testSQL.xml,如下所示

spring.jpa.mapping-resources = query/testSQL.xml

N那么你就可以称这个方法为普通的Spring方式。
请让我知道,如果有人在这方面卡住了,需要详细的解决方案。

w3nuxt5m

w3nuxt5m2#

您可以将de value(查询本身)外部化。在src/main/resources中,创建一个名为META-INF的文件夹。在该文件夹中,创建一个名为jpa-named-queries.properties的文件。
假设您的实体名为Customer,而数据表为TBL_CUSTOMER
当你把查询保存在代码中时,在你的存储库中,你就有了你写的代码。你可以这样把它外部化:
CustomerRepository.java

@Repository
public interface CustomerRepository extends JpaRepository<Customer, Long> {

    @Query(nativeQuery = true) 
    public List<String> findNameNative();

}

jpa-named-queries.properties

Customer.findNameNative=\
SELECT C.NAME \
FROM TBL_CUSTOMER C \
WHERE CONDITIONS

名称必须匹配,并且必须使用\表示换行符。

tvokkenx

tvokkenx3#

在资源下创建 meta。在此文件中,按以下方式定义查询:我的实体.fetchEntityBySomething=从客户中选择名称
我还没有尝试过原生查询,但是,通常的查询将这样工作。
不过,请注意:https://github.com/gasparbarancelli/spring-native-query

ix0qys7i

ix0qys7i4#

我认为DarkKnight的解决方案是最好的,用xml设置实体Map可以利用IDE的突出显示和缩进。
但是如果你使用的是 Spring Boot ,就会有一个优化。
它有一个相关的 Spring Boot 属性:spring.jpa.mapping-resources,可以在该属性中设置实体Map路径,并且该属性可以是数组,可以设置多个值。

相关问题