小编典典

Spring Data JPA,外部化本地查询

spring-boot

我正在使用Spring数据jpa执行本地查询,这是示例。

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

现在,由于公司的限制,无法将整个查询放在这里,但是查询非常大,例如100行。

N我们有很多这样的查询。

有没有一种方法可以在单独的文件(如xml或属性文件)中定义查询,并在此处引用它们。(保持代码干净)

寻求帮助。

谢谢。


阅读 512

收藏
2020-05-30

共1个答案

小编典典

经过多方努力和尝试,找到了解决方案。

1)在项目的资源文件夹中创建xml文件(使用任何名称)。在资源/ 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存储库,在该存储库中,我们应具有与该标签同名的方法。IE浏览器

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

}

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

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

N然后您可以将此方法称为正常的spring方法。

请让我知道是否有人坚持下去并需要详细的解决方案。

2020-05-30