Bạn có thể xem Spring Data JPA. Nó cho phép bạn chỉ định nghĩa một giao diện và thực thi các truy vấn mà không cần phải thực hiện việc thực hiện một cách thủ công.
Entity:
@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);
}
Setup:
EntityManager em = Persistence.getEntityManagerFactory().createEntityManager();
JpaRepositoryFactory factory = new JpaRepositoryFactory(em);
UserRepository repository = factory.getRepository(UserRepository.class);
Như bạn thấy, bạn có thể lựa chọn giữa nhiều cách khác nhau để lấy được các truy vấn được thực hiện từ phương pháp này .Trong khi phát trực tiếp từ tên phương thức là khả thi đối với các truy vấn đơn giản, bạn có thể chọn giữa số @NamedQuery
(tiêu chuẩn JPA) hoặc @Query
(chú thích JPA dữ liệu mùa xuân) phụ thuộc vào mức độ bạn muốn tuân theo các tiêu chuẩn.
JPA dữ liệu mùa xuân cung cấp cho bạn hỗ trợ ở các góc khác nhau của triển khai lớp truy cập dữ liệu, cho phép cung cấp triển khai tùy chỉnh cho các phương pháp và tích hợp độc đáo với Spring.
Nguồn
2009-05-21 12:41:14
Tại sao vị trí trung tâm phải là đối tượng mô hình so với DAO thực sự đang sử dụng nó? – Ruggs
Tôi quên đề cập đến những truy vấn được đặt tên mà tôi thường đưa vào thực thể. Nếu truy vấn vượt qua một số thực thể bạn chỉ cần chọn một thực thể phù hợp nhất. – cletus