EzyJPA: Query Data
Updated at 16998039280001. Create a Repsitory
If you have no idea about EzyJPA, please take a look the introduction. And now, let's say we have a Book
class like this:
@Entity public class Book extends CommonEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long categoryId; private Long authorId; private String name; private BigDecimal price; private LocalDate releaseDate; private LocalDateTime releaseTime; private LocalDateTime createdAt; private LocalDateTime updatedAt; }
To create a repository, you just need add a repository like this:
@EzyRepository public interface BookRepository extends EzyDatabaseRepository {}
2. Available methods
EzyJPA contains some method:
- save: to save one or many entities
- delete: to delete one or many entities
- find: to entities by id, ids, by field or find all
- count: count all entities
example:
bookRepository.save(book); bookRepository.delete(bookId); Book book = bookRepository.findById(bookId); bookRepository.count()
For a completed example, you can look at here.
3. Custom method
EzyJPA supports you create a custom method to query SQL database. Let's say, we want to find a book by name and authorId, we can do like this:
Book findByNameAndAuthorId(String name, Long authorId);
In this method, name
is Book's name field and authorId
is Book's authorId field. It means you can use this template to create a lot of query methods, like:
List<Book> findByCategoryIdOrAuthorId(long category, long authorId); List<Book> findByCategoryIdAndName(long category, long authorId, Next next); int countByAuthorId(long authorId);
4. Custom query method
If you have a complicated query and can not create a custom method, you can annotate your method with @EzyQuery
annotation like this:
@EzyQuery("select e from Book e order by e.price desc, e.id desc") List<Book> findBooksOrderByPriceAndId(Next next); @EzyQuery( value = "select * from book e " + "where e.price > ?0 or (e.price = ?0 and e.id > ?1) " + "order by e.price desc, e.id desc", nativeQuery = true ) List<Book> findBooks( BigInteger priceExclusive, long idExclusive, Next next ); @EzyQuery("select e from Book e where e.name < ?0 order by e.name") List<Book> findByNameLt(String name, Next next); @EzyQuery("select e from Book e where e.name > ?0 order by e.name") List<Book> findByNameGt(String name, Next next); @EzyQuery(value = "select sum(e.price) as sum from Book e", nativeQuery = true) SumBookPriceResult sumPrice();
4. Pagination
EzyJPA use Next
class to help you specific skip
and limit
value, you can create Next
by:
Next.fromSkipLimit(skip, limit) // or Next.fromPageSize(page, size)
Full source code of examples is available on Github
Next
You can take a look how to use custom query result.