Dar*_*ght 9 spring-data-jpa spring-boot
我正在使用 Spring data jpa 来执行本机查询,这是示例。
@Query(value = "select name from customer", nativeQuery = true)
public List<String> findNameNative() ;
Run Code Online (Sandbox Code Playgroud)
现在,由于公司限制不能把整个查询放在这里,但查询非常庞大,比如 100 行。
N 我们有很多这样的查询。
有没有一种方法可以在单独的文件(如 xml 或属性文件)中定义查询并在此处引用它们。(保持代码干净)
得到帮助。
谢谢。
您可以外部化 de value,它是查询本身。在其中src/main/resources,创建一个名为 的文件夹META-INF。在其中创建一个名为jpa-named-queries.properties.
假设您的实体被称为Customer并且表是TBL_CUSTOMER。
当您将查询保留在代码中时,在您的存储库中,您就拥有了您编写的代码。你可以这样外部化它:
客户存储库.java
@Repository
public interface CustomerRepository extends JpaRepository<Customer, Long> {
@Query(nativeQuery = true)
public List<String> findNameNative();
}
Run Code Online (Sandbox Code Playgroud)
jpa 命名查询.properties
Customer.findNameNative=\
SELECT C.NAME \
FROM TBL_CUSTOMER C \
WHERE CONDITIONS
Run Code Online (Sandbox Code Playgroud)
名称必须匹配,并且必须使用 \ 作为换行符。
经过多次努力和尝试找到了解决方案。
1) 在项目的资源文件夹中创建 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>
Run Code Online (Sandbox Code Playgroud)
3)在此xml中创建带有named-native-query标签的标签。
<named-native-query name="XyzEntity.methodName">
<query>
<! [CDATA[
Your native query
] ] >
</query>
</named-native-query>
Run Code Online (Sandbox Code Playgroud)
注意 -> 可以添加多个此类本机命名查询标签,并且所有标签都必须位于
<entity-mapping> </entity-mapping>
Run Code Online (Sandbox Code Playgroud)
4) 上面步骤中名称标签中提到的“XyzEntity”应该有一个 Jpa 存储库,并且在该存储库中我们应该有与标签同名的方法。IE
public interface XyzRepo extends JpaRepository <XyzEntity, Long> {
Tuple methodName() ;
Run Code Online (Sandbox Code Playgroud)
}
5)在应用程序属性文件中添加testSQL.xml,如下所示
spring.jpa.mapping-resources = query/testSQL.xml
Run Code Online (Sandbox Code Playgroud)
N 然后你就可以正常调用这个方法了 spring 方式。
如果有人被困在这个问题上并需要详细的解决方案,请告诉我。
| 归档时间: |
|
| 查看次数: |
4704 次 |
| 最近记录: |