【问题标题】:How execute native SQL queries using Spring in runtime in Java?如何在 Java 运行时使用 Spring 执行本机 SQL 查询?
【发布时间】:2019-09-02 05:55:34
【问题描述】:

那么,有什么方法可以从Repository接口执行原生SQL查询吗?

是的,我知道@Query 注释,但是如何执行可以在运行时更改的查询?喜欢JDBCexecuteQuery() 方法?

【问题讨论】:

标签: java mysql spring jdbc nativequery


【解决方案1】:

您可以将规范与您的 JpaRepository 一起使用,以在运行时构建动态查询。

将 JpaSpecificationExecutor 添加到您的 JpaRepository 接口...

@Repository
public interface MyRepo extends JpaRepository<MyEntity, Long>, JpaSpecificationExecutor {
}

然后使用返回规范的静态方法创建一个类......

public class MyEntitySearchSpec {
  private MyEntitySearchSpec() {
    // Remove this private constructor if need to add public non-static methods.
  }

  public static Specification<MyEntity> myEntitySearch(
      final mysearchCriteria MySearchCriteria) {
    return (root, query, cb) -> {
      List<Predicate> predicates = new ArrayList<>();

      if (mysearchCriteria.isOnlyActive()) {
        predicates.add(cb.isNull(root.get("closeDate")));
      }

      if (mysearchCriteria.getCaseNumber() != null) {
        predicates.add(cb.equal(root.get("caseNumber"),
            mysearchCriteria.getCaseNumber()));
      }

      return cb.and(predicates.toArray(new Predicate[] {}));
    };
  }
}

你可以这样称呼...

myRepo.findAll(myEntitySearch(mysearchCriteria));

【讨论】:

    【解决方案2】:

    如果您的意思是使用 Spring Data,您可以执行以下操作:

    @Query(value = "SELECT p from Person p where r.name = :person_name")
    Optional<Person> findPersonByName(@Param("person_name") String personName);
    

    您也可以使用本机查询:

    @Query(value = "select * from person p where r.name = :person_name")", nativeQuery = true)
    enter code here
    

    【讨论】:

      【解决方案3】:

      实现JpaRepository并使用

      @PersistenceContext
      private EntityManager em;
      

      使用 Java 的全部功能创建 query 类型的 string 然后:

       final Query emQuery = em.createNativeQuery(query);
       final List<Object[]> resultList = emQuery.getResultList();
      

      【讨论】:

        猜你喜欢
        • 2018-06-02
        • 2019-06-21
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 2012-02-24
        • 1970-01-01
        • 1970-01-01
        • 2017-09-06
        相关资源
        最近更新 更多