如何在运行时在Spring Boot和Data中进行动态查询?

By simon at 2018-02-07 • 0人收藏 • 47人看过

我是Java新手,从Spring Boot和Spring Data JPA开始,所以我知道2 如何获取数据的方法:   由Repository la用文字方法命名:FindOneByCity(String city);   通过自定义回购,使用@Query注释:@Query('select * from t能够在哪里城市?“); 这两种方法都是静态设计的。 我该如何获取我在ru上建立的查询的数据n次? _注意:QueryDSL支持被弃用,我不能使用它。 我想要达到的是创造的可能性e动态报告 不用触摸代码。一个表格将包含具有名称的报告的记录 和SQ1查询与默认参数像begindate,end_date等,但 与各种各样的身体。例:

"Sales report by payment method" | select * from sales where met_pay = %pay_method% and date is between %begin_date% and %end_date%;

2 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

[Criteria API](https://docs.oracle.com/javaee/6/tutorial/doc/gjivm.html) 主要是为此而设计的。 它提供了一个改变本地方式来定义JPA查询。 有了它,您可以根据运行时提供的数据构建动态查询。 要使用它,哟你将需要创建一个自定义存储库实现蚂蚁没有 只有一个接口。 你确实需要注入一个EntityManager创建需要的对象 创建并执行 [CriteriaQuery](https://docs.oracle.com/javaee/6/api/javax/persistence/criteria / CriteriaQuery.html)。 你当然必须写锅炉板代码来建立查询和 执行它。 [这部分N](https://docs.spring.io/spring- 数据/ JPA /文档/ 2.1.x的/参照/ HTML /#repositories.custom的实现) 解释如何创建使用Spring Boot的自定义存储库。


关于您的编辑:

我想要实现的是创造动力的可能性ic报告 不用触摸代码。一个表格将包含具有名称的报告的记录 和使用默认参数l的SQ1查询ike begindate,enddate等 与各种各样的身体。 如果查询是用纯文本文件9999999写在手上的999641 将不会是最好的选择,因为JPQL / SQL查询和Criteria查询是真的 不是用相同的方式写的。 在Java公司de,将纯文本文件中定义的JPQL / SQL查询映射到 Map<String, String>结构会更适应。 但是我也是这样我怀疑你想做什么的可行性。查询可能 有特定的参数,对于某些情况下,你不会另外c选择比 修改代码。参数的特殊性会影响查询的可维护性 非常困难和容易出错。亲自,我会通过允许来实现这个需求 客户为每个字段选择是否应该应用一个条件。 然后从imp一方面,我会用这个用户信息来构建 我CriteriaQuery.那里Criteria会做一个优秀的乔b:少 代码复制,对查询构建更具适应性 编译类型更多的类型检查。

2018-02-07   #2

Spring数据仓库在下面使用EntityManager。存储库类是 只是另一层让用户不用担心细节。但是,如果一个用户 想弄脏他的手,那当然春天不介意。 那是当你可以使用EntityMan的时候愤怒直接。 让我们假设你有一个类库如AbcRepository

interface AbcRepository extends JpaRepository<Abc, String> {

}
您可以像创建一个自定义存储库
interface CustomizedAbcRepository {
  void someCustomMethod(User user);
}
实现类看起来像
class CustomizedAbcRepositoryImpl implements CustomizedAbcRepository {

@Autowired
EntityManager entityManager;


  public void someCustomMethod(User user) {
    // You can build your custom query using Criteria or Criteria Builder
    // and then use that in entityManager  methods
  }
}
只需谨慎一点,Customized界面的命名和定制 实施课是非常重要的

登录后方可回帖

Loading...