当前位置: 首页 > 知识库问答 >
问题:

是否可以在Spring Boot中生成动态SQL查询?

拓拔高畅
2023-03-14

我想实现一个有五个可选变量的搜索函数,并且在每个组合中,所以一个开关/案例不是一个可能的方法。所以我不能使用构建在Spring启动函数,因为它们不是动态的(如果我错了,请纠正我)。我知道crudrepository中有@查询注释,但是没有办法用可选参数编写查询?我试图用jpa编写我自己的数据库访问,没有Spring启动CrudRepository的帮助。我在手册中读到这应该可以工作:

@Autowired
@PersistenceContext
private EntityManager em;

@Transactional
public List<Persons>searchPersons(params...){}

但问题是,我的EntityManager总是空的,我不知道为什么。我找了几个小时,什么也没找到。

也许你们知道在Spring Boot中编写动态SQL查询的方法。CrudRepository中是否有方法为查询定义可选参数?顺便说一句,我使用postgreSQL数据库。

非常感谢你的帮助。

共有3个答案

龙佐
2023-03-14

我知道这个问题由来已久,但对于任何来这里对实现动态SQL查询感兴趣的人来说,看看这两篇博文,它们都很棒。

  1. 使用Spring Data JPA规范和标准API实现动态SQL查询
  2. 使用Spring Data JPA存储库和EntityManager编写动态SQL查询
王炜
2023-03-14

您可以使用自定义存储库(创建自己的接口,为其编写一个Impl类,并通过该接口扩展存储库)。

然后你应该有:

个人定制

个人信息

接下来,使用自动连接到存储库中的EntityManager实现一个查询。您可以通过使用JPQL或JPA2.1标准API来实现这一点。

对于每个参数,都有一个条件将其添加到查询本身,以及准备好的语句参数。这样,就可以构建一个动态查询。

以下线程是相关的:创建可能包含参数或不包含参数的JPA查询的最佳方法

巢安澜
2023-03-14

你可能想看看规格。

看到这里的留档了吗

 类似资料:
  • 我有一个JS项目,它使用aws服务作为后端(Cognito、AppSync、S3等)。 我使用AWS Amplify访问这些服务,但不使用Amplify CLI;所有aws服务都是手动配置的。 关于AppSync,我有一个小脚本,它读取模式(从APPESNC控制台手动下载),然后生成TypeScript操作和操作类型文件(使用放大器-图形ql-文档-生成器和放大器-图形ql-类型-生成器)。 有没

  • 问题内容: 如果是这样,您该怎么做? (jboss / tomact嵌入式/ jdk 1.5) 不是嵌入式js / css,而是实际文件… 问题答案: 您要做的是将* .css Servlet映射分配给JSPServlet。 在大多数容器中,您将看到这样的映射(这是来自Glassfish的,位于default-web.xml中): 在这里,它声明了JSP servlet,并将“ * .jsp”映射

  • 问题内容: 让我们考虑以下情况。有一个,有一个。子窗格将添加到父窗格。考虑到可以动态地添加和删除子窗格而没有任何限制和顺序的情况下,如何才能仅在可见子窗格的情况下使parentPane可见。当然childPane的可见状态也可以随时更改。是否可以创建动态Bindings.OR,以便我可以动态向其添加/删除子可见属性?如果是,那怎么办?如果没有,那么在这种情况下使用什么解决方案? 问题答案: 您可以

  • Spring官方JPA规范文档 我对非常陌生,所以任何指导都很有价值。

  • 问题内容: 假设我在数据库中有一个表“ student”,它很大。学生中有几列,包括“ id”和“ class-id”。 在hbm文件中,我目前具有以下防御者代码: 在这种情况下,如果我更新学生持久性课程,则查询将类似于: 但是出于分区的原因,我还想在查询中包括class-id,例如: 我尝试了Composite-ID,但是发现Composite-ID中不允许使用生成器,因为Composite-I

  • 问题内容: 我想问一下其他程序员如何生成动态SQL字符串以作为SQLCommand对象的CommandText执行。 我正在生成包含用户生成的WHERE子句和SELECT字段的参数化查询。有时查询很复杂,我需要对不同部分的构建方式进行大量控制。 当前,我正在使用许多循环和switch语句来生成必要的SQL代码片段并创建所需的SQL参数对象。这种方法很难遵循,并且使维护工作变得很繁琐。 有没有更清洁