如何编写自定义JPA方法以使用字段名称搜索数据库记录

时间:2017-11-20 05:28:03

标签: spring-boot

我在Spring Boot工作。现在我正在为CRUD操作创建API。另外,我需要编写一个代码,用于使用字段名称搜索数据库记录。在这里,我正在使用“产品”表。该表包含“itemCode”,“hsCode”,“itemCategoryId”,“productDescription”,“brand”,“countryOfOrigin”,“uom”,“retailSellingPrice”,“exciseTaxPercentage”,“assignedTo”,“assignedBy”等字段。 ..等

     So, if the user gives the input as the brand, uom, retailSellingPrice. i should use a Query like "SELECT * FROM PRODUCTS WHERE brand=:brand, uom =:uom,retailSellingPrice=:retailSellingPrice ".

我编写了一个自定义JPA方法,如findByuomContainingOrRetailSellingPriceContainingOrBrandContaining(parameter1,parameter2,parameter3);

但是有没有其他方法可以使用字段搜索产品,这样如果有10个搜索字段,那么我的自定义方法只会很小。

请给我一些建议

2 个答案:

答案 0 :(得分:0)

您可以创建自己的自定义存储库,并根据需要提供方法名称(一个小的)。

您可以创建如下所示的自定义存储库:

假设您有ProductRepository implements CrudRepository<Product,Long>

  1. 创建一个类似#Your_repository_name{custom} ProductRepositoryCustom )的界面,并根据需要为所需参数提供方法名称。
  2. ProductRepositoryCustom 界面创建实现类。你可以随心所欲地命名,但是如果你遵循一些约定就会很好。像#Your_repository_name {Impl}( ProductRepositoryImpl
  3. ProductRepositoryCustomProductRepository
  4. 延伸ProductRepository implements CrudRepository<Product,Long>,ProductRepositoryCustom

    现在,您可以从调用ProductRepositoryImpl方法的同一对象中调用ProductRepository的方法。

    @Autowired
    private ProductRepository productRepository;
    

    使用productRepository调用Impl clas的方法。

答案 1 :(得分:0)

查看JPA的按示例查询QueryByExampleExecutor接口由JpaRepository扩展。它有一些通过示例搜索的方法。这是一个简单的例子,

假设Product是表示Products表的实体,那么你可以这样做,

Product product = new Product();
product.setItemCode(...);
product.setHsCode(...);
...

Example<Product> example = Example.of(product);
Iterable<Product> = repository.findAll(example);

您可以找到具体示例here