我正在使用Spring data jpa来执行原生Query,下面是一个示例。
@Query(value = "select name from customer", nativeQuery = true)
public List<String> findNameNative() ;
现在,由于公司的限制,不能将整个查询放在这里,但查询相当大,像100行。
N我们有许多这样的查询。
有没有一种方法我可以定义查询在一个单独的文件,如xml或属性文件,并引用他们在这里。(以保持代码干净)
感谢你的帮助
- 谢谢-谢谢
4条答案
按热度按时间pb3skfrl1#
经过多次努力和尝试找到了解决办法。
1)在项目的resources文件夹中创建xml文件(任何名称),在resources /query中输入testSQL.xml
2)遵循testSQL.xml中“orm.xml”的xml标准,此副本粘贴标头并创建以下内容的标记:
3)在此xml中,创建带有named-native-query标记的标记。
注意-〉可以添加多个这样的本地命名查询标记,并且所有这些标记必须位于
4)在上面步骤中在名称标记中提到“XyzEntity”应该有一个Jpa存储库,且在该存储库中,我们应该有与标记同名的方法。
}
5)在应用程序属性文件中添加testSQL.xml,如下所示
N那么你就可以称这个方法为普通的Spring方式。
请让我知道,如果有人在这方面卡住了,需要详细的解决方案。
w3nuxt5m2#
您可以将de
value
(查询本身)外部化。在src/main/resources
中,创建一个名为META-INF
的文件夹。在该文件夹中,创建一个名为jpa-named-queries.properties
的文件。假设您的实体名为
Customer
,而数据表为TBL_CUSTOMER
。当你把查询保存在代码中时,在你的存储库中,你就有了你写的代码。你可以这样把它外部化:
CustomerRepository.java
jpa-named-queries.properties
名称必须匹配,并且必须使用\表示换行符。
tvokkenx3#
在资源下创建 meta。在此文件中,按以下方式定义查询:我的实体.fetchEntityBySomething=从客户中选择名称
我还没有尝试过原生查询,但是,通常的查询将这样工作。
不过,请注意:https://github.com/gasparbarancelli/spring-native-query
ix0qys7i4#
我认为DarkKnight的解决方案是最好的,用xml设置实体Map可以利用IDE的突出显示和缩进。
但是如果你使用的是 Spring Boot ,就会有一个优化。
它有一个相关的 Spring Boot 属性:
spring.jpa.mapping-resources
,可以在该属性中设置实体Map路径,并且该属性可以是数组,可以设置多个值。