Spring 按相似特征查找

Spring Find By Like Feature

我的代码中有一个实体列表(google.com、amazon.com 等),我想让我的存储库在我输入一个带有子域。

所以基本上,我实现了什么存储库功能,这样我就可以 运行 类似

public List<ValidDomainsEntity> findByCompanyDomainLike("www.google.com");

并拥有 return 在其

中具有 google.com 的实体
String companyDomain;

其中 companyDomain = "google.com"

所以用更通俗的话说:我的数据库包含 URL,但没有子域或前缀。当我输入一个带有子域 URL 的 URL 时,我在 spring 的存储库中使用什么查询来查找 URL

编辑:基本上我是如何做 spring 相当于

select * from valid_domains where 'www.amazon.com' LIKE CONCAT('%', companyDomain);

你可以用多种方式来写它。第一个选项是编写本机查询。

@Query(value = "select * from valid_domains where 'www.amazon.com' LIKE CONCAT('%', :companyDomain", nativeQuery = true);
public List<ValidDomainsEntity> myQuery(@Param("companyDomain") String companyDomain);

第二个选项是编写一个简单的非本机查询并使用您的 Entiry class 名称和字段。为此,您可以使用 javax.persistence.EntityManager@Query(value = "", nativeQuery = false)。默认@Query 是非原生查询,你不必写nativeQuery = true。我还展示了一个 EntityManager 示例。

@Autowired //Constructor dependency injection is more preferred instead of @Autowired
private EntityManager entityManager;

List<ValidDomain> query = entityManager.createQuery("SELECT new ValidDomain(d.id, d.domainName) from ValidDomain d where 'www.amazon.com' LIKE CONCAT('%', :variableName)", ValidDomain.class).getResultList();

或者您也可以使用 EntityManagerentityManager.createNativeQuery() 创建本机查询。