java—获取SpringDataJPA中列的所有记录,即使我们将其指定为参数

kuhbmx9i  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(371)

有一张table叫 zipcode 列为 id, zip, city, state .
在我们的情况下,我们想得到的记录基于 id 或者 zip 或者 city 或者 state .
常规sql查询如下所示

SELECT * FROM zipcode WHERE id=id AND zip=zip AND city=city AND state=state;

如果我们想得到一个特定的状态,那么我们将用给定的名称替换状态值。

SELECT * FROM zipcode WHERE id=id AND zip=zip AND city=city AND state='California';

如果我们想要一个特定的城市,那么我们可以写

SELECT * FROM zipcode WHERE id=id AND zip=zip AND city='Los Angles' AND state=state;

spring数据jpa的问题是,如果我们编写一个方法

@Query(value = "SELECT * FROM zipcode WHERE id=?1 AND zip=?2 AND city=?3 AND state=?4", nativeQuery = true)
List<Zipcode> getZipCodes(Integer id, Integer zip, String city, String state)

我只想得到一个特定的州以外的所有城市,但我不能使用这个方法,比如我如何使用上面的sql查询,我们只需要替换列值。
如何在springdatajpa中使用本机查询来实现这一点?

ttvkxqim

ttvkxqim1#

我不知道spring数据是否有一种方法可以在单个方法中实现这一点,但您可以尝试使用一个示例:

public List<Zipcode> getZipcodes(Integer id, Integer zip, String city, String state){
  Zipcode zipcode = new Zipcode();
  if (id != null)
    zipcode.setId(id);
  if (zip != null)
    zipcode.setZip(zip);
  ...
  return zipcodeRepository.findAll(Example.of(zipcode));
}
falq053o

falq053o2#

试试这个,

@Query(value = "SELECT * FROM zipcode WHERE  (id=?1 or ?1 is null) AND (zip=?2 or ?2 is null) AND  (city=?3 or ?3 is null)  AND (state=?4 or ?4 is null) ", nativeQuery = true)
List<Zipcode> getZipCodes(Integer id, Integer zip, String city, String state)
j13ufse2

j13ufse23#

使用spring数据jpa查询参数

@Query(value = "SELECT * FROM zipcode WHERE id=:id AND (zip=:zip or :zip is null) AND  (city=:city or :city is null)  AND (state=:state or :state is null) ", nativeQuery = true)
List<Zipcode> getZipCodes(@Param("id") Integer id, @Param("zip") Integer zip, @Praram("city) String city, @Param("state") String state)

相关问题