Spring Data JPA 是一个非常好的项目,可以为您生成 DAO 并提供更多功能!您只需要创建一个接口(无需任何实现):
interface PaymentMethodsDao extends JpaRepository<PaymentMethods, Integer> {}
通过继承
JpaRepository
,这个接口将自动提供以下功能:
PaymentMethod save(PaymentMethod entity);
Iterable<PaymentMethod> save(Iterable<? extends PaymentMethod> entities);
PaymentMethod findOne(Integer id);
boolean exists(Integer id);
Iterable<PaymentMethod> findAll();
long count();
void delete(Integer id);
void delete(PaymentMethod entity);
void delete(Iterable<? extends PaymentMethod> entities);
void deleteAll();
Iterable<PaymentMethod> findAll(Sort sort);
Page<PaymentMethod> findAll(Pageable pageable);
List<PaymentMethod> findAll();
List<PaymentMethod> findAll(Sort sort);
List<PaymentMethod> save(Iterable<? extends PaymentMethods> entities);
void flush();
PaymentMethod saveAndFlush(PaymentMethods entity);
void deleteInBatch(Iterable<PaymentMethods> entities);
这个接口是强类型的(泛型),并且会自动为您实现。对于每个实体,您只需要创建一个扩展JpaRepository<T,Integer extends Serializable>
的接口即可。
但是请稍等,还有更多!假设您的PaymentMethod
具有name
和validSince
持久字段。如果您将以下方法添加到您的接口中:
interface PaymentMethodsDao extends JpaRepository<PaymentMethods, Integer> {
Page<PaymentMethod> findByNameLikeAndValidSinceGreaterThan(
String name, Date validSince, Pageable page
);
}
该框架将解析方法名称:
findBy
(Name like) And
(ValidSince greater than)
创建JPA QL查询,应用分页和排序(Pageable page
)并为您运行它。无需实现:
paymentMethodsDao.findByNameLikeAndValidSinceGreaterThan(
"abc%",
new Date(),
new PageRequest(0, 20, Sort.Direction.DESC, "name"
);
生成的查询语句:
SELECT * //or COUNT, framework also returns the total number of records
FROM PaymentMethods
WHERE name LIKE "abc%"
AND validSince > ...
并且应用分页。
唯一的缺点是这个项目比较新,容易遇到问题(不过它正在积极开发中)。