V tomto příspěvku ukáži, jak lze vytvořit sql dotazy s LIKE ve Spring Data bez pomoci @Query anotace. Budeme mít entitu kniha
@Entity
@Table(name = "t_book")
@SequenceGenerator(initialValue = 100, name = "t_book_seq_gen", sequenceName = "t_book_seq")
class BookEntity (
@Id
@GeneratedValue(generator = "t_book_seq_gen", strategy = GenerationType.SEQUENCE)
var id: Long = 0L,
var author: String = "",
var publisher: String = "",
var title: String = "",
...
)
a vytvoříme si jpa repository
interface BookRepository: JpaRepository<BookEntity, Long> {
...
}
Následující metody:
fun findByTitleContaining(text: String): List<BookEntity>
Vyhledá všechny BookEntity, které v title mají zadaný text (je case sensitive).
Vygenerované SQL obsahuje podmínku LIKE.
fun findByTitleContainingIgnoreCase(text: String): List<BookEntity>
Vyhledá všechny BookEntity, které v title mají zadaný text (není case sensitive).
Vygenerované SQL obsahuje podmínku LIKE s funkcí UPPER() (použita databáze PostgreSQL).
fun findByTitleNotContaining(text: String): List<BookEntity>
Vyhledá všechny BookEntity, které v title nemají zadaný text (je case sensitive).
fun findByTitleNotContainingIgnoreCase(text: String): List<BookEntity>
Vyhledá všechny BookEntity, které v title nemají zadaný text (není case sensitive).
Místo Containing v názvu metody je možné použí i IsContaining nebo Contains. Výsledky budou stejné.