簡體   English   中英

如何在Java運行時中使用Spring執行本地SQL查詢?

[英]How execute native SQL queries using Spring in runtime in Java?

那么,有什么方法可以從Repository接口執行本機SQL查詢嗎?

是的,我知道@Query注釋,但是如何執行可以在運行時更改的查詢? JDBC executeQuery()方法一樣?

實施JpaRepository並使用

@PersistenceContext
private EntityManager em;

使用Java的全部功能來創建string類型的query ,然后:

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

如果您打算使用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

您可以將規范與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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM