Вы можете взглянуть на Spring Data JPA . Это позволяет вам просто определить интерфейс и выполнять запросы без необходимости выполнять выполнение вручную.
Организация:
@Entity
@NamedQuery(id="User.findByLastname" query="from User u where u.lastname = ?1")
public class User implements Persistable<Long> {
@Id
private Long id;
private String username;
private String lastname;
private int age;
}
Repository:
public interface UserRepository extends CrudRepository<User, Long> {
// Will trigger the NamedQuery due to a naming convention
List<User> findByLastname(String lastname);
// Will create a query from the methodname
// from User u where u.username = ?
User findByUsername(String username);
// Uses query annotated to the finder method in case you
// don't want to pollute entity with query info
@Query("from User u where u.age > ?1")
List<User> findByAgeGreaterThan(int age);
}
Установка:
EntityManager em = Persistence.getEntityManagerFactory().createEntityManager();
JpaRepositoryFactory factory = new JpaRepositoryFactory(em);
UserRepository repository = factory.getRepository(UserRepository.class);
Как видите, вы можете выбирать между различными способами получения запроса, который будет выполнен из метода. Хотя получение его непосредственно из имени метода возможно для простых запросов, вы, вероятно, выбрали бы между @NamedQuery
(стандарт JPA) или @Query
(аннотация Spring Data JPA), в зависимости от того, насколько вы предпочитаете придерживаться стандартов.
Spring Data JPA предоставляет вам поддержку в различных других аспектах реализации уровня доступа к данным, позволяет предоставлять собственные реализации для методов и прекрасно интегрируется с Spring.