在上篇文章springboot(二):web综合开拓中简朴先容了一下spring data jpa的基本性利用,这篇文章将越发全面的先容spring data jpa 常见用法以及留意事项。
利用spring data jpa 开拓时,发明海内对spring boot jpa全面先容的文章较量少案例也较量琐屑,因此写文章总结一下。本人也正在翻译Spring Data JPA 参考指南,有乐趣的同学接待接洽我,一起插手翻译中!
spring data jpa先容
首先相识JPA是什么?
JPA(Java Persistence API)是Sun官方提出的Java耐久化类型。它为Java开拓人员提供了一种工具/关联映射东西来打点Java应用中的干系数据。他的呈现主要是为了简化现有的耐久化开拓事情和整合ORM技能,竣事此刻Hibernate,TopLink,JDO等ORM框架各自为营的排场。值得留意的是,JPA是在充实接收了现有Hibernate,TopLink,劳务派遣管理系统,JDO等ORM框架的基本上成长而来的,具有易于利用,伸缩性强等利益。从今朝的开拓社区的回响上看,JPA受到了极大的支持和赞扬,个中就包罗了Spring与EJB3.0的开拓团队。
留意:JPA是一套类型,不是一套产物,那么像Hibernate,TopLink,JDO他们是一套产物,假如说这些产物实现了这个JPA类型,那么我们就可以叫他们为JPA的实现产物。
spring data jpa
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 类型的基本上封装的一套JPA应用框架,可使开拓者用极简的代码即可实现对数据的会见和操纵。它提供了包罗增删改查等在内的常用成果,且易于扩展!进修并利用 Spring Data JPA 可以极大提高开拓效率!
spring data jpa让我们摆脱了DAO层的操纵,根基上所有CRUD都可以依赖于它来实现。
根基查询
根基查询也分为两种,软件开发,一种是spring data默认已经实现,一种是按照查询的要领来自动理会成SQL。
预先生成要领
spring data jpa 默认预先生成了一些根基的CURD的要领,譬喻:增、删、改等等。
1 担任JpaRepository
public interface UserRepository extends JpaRepository<User, Long> { }
2 利用默认要领
@Test public void testBaseQuery() throws Exception { User user=new User(); userRepository.findAll(); userRepository.findOne(1l); userRepository.save(user); userRepository.delete(user); userRepository.count(); userRepository.exists(1l); // ... }
就不表明白按照要领名就看出意思来。
自界说简朴查询
自界说的简朴查询就是按照要领名来自动生成SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后头跟属性名称:
User findByUserName(String userName);
也利用一些加一些要害字And、 Or。
User findByUserNameOrEmail(String username, String email);
修改、删除、统计也是雷同语法。
Long deleteById(Long id); Long countByUserName(String userName)
根基上SQL体系中的要害词都可以利用,譬喻:LIKE、 IgnoreCase、 OrderBy。
List<User> findByEmailLike(String email); User findByUserNameIgnoreCase(String userName); List<User> findByUserNameOrderByEmailDesc(String email);
详细的要害字,利用要领和出产成SQL如下表所示:
巨大查询
在实际的开拓中我们需要用到分页、删选、连表等查询的时候就需要非凡的要领可能自界说SQL
分页查询
分页查询在实际利用中很是普遍了,spring data jpa已经帮我们实现了分页的成果,图纸加密,在查询的要领中,需要传入参数Pageable ,当查询中有多个参数的时候Pageable发起做为最后一个参数传入
Page<User> findALL(Pageable pageable); Page<User> findByUserName(String userName,Pageable pageable);
Pageable 是spring封装的分页实现类,利用的时候需要传入页数、每页条数和排序法则
@Test public void testPageQuery() throws Exception { int page=1,size=10; Sort sort = new Sort(Direction.DESC, "id"); Pageable pageable = new PageRequest(page, size, sort); userRepository.findALL(pageable); userRepository.findByUserName("testName", pageable); }
限制查询
有时候我们只需要查询前N个元素,可能支取前一个实体。
ser findFirstByOrderByLastnameAsc(); User findTopByOrderByAgeDesc(); Page<User> queryFirst10ByLastname(String lastname, Pageable pageable); List<User> findFirst10ByLastname(String lastname, Sort sort); List<User> findTop10ByLastname(String lastname, Pageable pageable);
自界说SQL查询