我發現了一個優雅的方法來解決這個問題。有像「coalese」這樣的sql操作符(一些解釋:http://www.1keydata.com/sql/sql-coalesce.html)。它允許傳遞任何參數進行查詢,並確保null
參數將被忽略。我的DAO接口的
例(春季數據JPA,MySQL的):
@Query("select b from Book b where " +
"coalesce(b.name, '') like concat('%', :name, '%') " +
"and coalesce(b.author, '') like concat('%', :author, '%') " +
"and coalesce(b.category, '') like concat('%', :category, '%') " +
"and coalesce(b.publisher, '') like concat('%', :publisher, '%') " +
"and (b.available = :available1 or b.available = :available2)")
public Page<Book> findByParams(
@Param("name") String name
, @Param("author") String author
, @Param("category") String category
, @Param("publisher") String publisher
, @Param("available1") Boolean available1, @Param("available2") Boolean available2
, Pageable pageReq);
希望這有助於
像這樣的問題,只是提出了4個問題倒在'Java'。你提出的方式可能是最簡單的。但是,您可能會泄露您網站中的專欄名稱。 –