是否可以在spring boot中生成动态SQL查询?

时间:2016-06-03 07:57:18

标签: java spring spring-boot spring-data-jpa

我想实现一个带有五个可选变量的搜索功能,并且在每个组合中,所以切换/大小写不可能。所以我不能在spring引导函数中使用build,因为它们不是动态的(如果我错了,请纠正我)。 我知道crudrepository中有@query注释,但是没有办法用可选参数编​​写查询? 我试图用jpa编写自己的数据库访问,没有Spring boot CrudRepository的帮助。 我在手册中读到这应该有效:

@Autowired
@PersistenceContext
private EntityManager em;

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

但问题是,我的EntityManager始终为null,我不明白为什么。我搜索了几个小时,一无所获。

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

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:4)

您可能需要查看规格。

See the documentation here

为此,您的存储库界面需要实现JpaSpecificationExecutor

答案 1 :(得分:0)

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

然后你应该:

PersonRepositoryCustom

PersonRepositoryCustomImpl

接下来,使用自动装入存储库的EntityManager实现查询。您可以使用JPQL或JPA 2.1 Criteria API执行此操作。

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

以下主题是相关的: Best way to create JPA query that might contain a parameter or might not