前言
JPA要用好,要遵循最佳实践,否则不如不用。
比起半自动化的MyBatis,全自动化的JPA开发效率更高,但由于底层封装较多,较为复杂,JPA在解放开发人员生产力的同时,也存在一些坑,有些坑在线上环境可能会给您造成血的教训。。。
好在JPA也提供了一些方式,可以绕开这些坑,因此总结JPA的最佳实践十分有必要。
— 整体使用原则 —
简单的增删改查操作:优先考虑用JPA自带的Repository API
说明:
如果是根据主键id查询,则直接使用JPA内置的findById方法,如:
User user = userDAO.findById(id).get();
如果是要根据主键id之外属性的固定查询,则一般在对应的Repository类里定义findByXxx方法即可,如:
List findByAddress(String address);
灵活复杂的where、嵌套子查询、批量更新操作:推荐使用querydsl实现
说明:
在querydsl出现之前,相比MyBatis,JPA在如下2方面存在明显的不足:
灵活的where
嵌套子查询
而querydsl的出现给JPA加上了一对翅膀,很好的弥补了JPA在如上2方面的劣势,让JPA的能力又上了一个新台阶。
出于方便集中审核sql的需要:建议所有自定义的db操作集中放在同一个包下
说明:
很多人在使用J