Spring data JPA
spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的规则进行**【方法命名】去写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。
Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦。
SpringData Jpa 极大简化了数据库访问层代码。 如何简化的呢? 使用了SpringDataJpa**,我们的dao层中只需要写接口,就自动具有了增删改查、分页查询等方法。
Spring Data JPA实例
1.最好在父maven项目中设置spring data统一版本管理依赖: 因为不同的spring data子项目发布时间版本不一样,你自己维护很麻烦, 这样不同的spring data子项目能保证是统一版本。
2.在子项目中添加:
xml
JavaConfig
pojo
customerRepository
测试
使用 Spring Data Repositories
Spring Data repository 抽象的目标是显着减少为各种持久性存储实现数据访问层所需的样板代码量。
CrudRepository
在CrudRepository之上,有一个PagingAndSortingRepository抽象,它添加了额外的方法来简化对实体的分页访问:
customerRepository
测试:
自定义操作:
jpql(原生SQL)
a. @Query
i. 查询如果返回单个实体 就用pojo接收 , 如果是多个需要通过集合
ii. 参数设置方式
- 索引 : ?数字
- 具名: :参数名 结合@Param注解指定参数名字
iii. 增删改: - 要加上事务的支持:
- 如果是插入方法:一定只能在hibernate下才支持 (Insert into
…select )
customerRepository
测试
规定方法名
支持的查询方法主题关键字(前缀)
决定当前方法作用
只支持查询和删除。
支持的查询方法谓词关键字和修饰符决定查询条件
Query by Example
b. 只支持查询
i. 不支持嵌套或分组的属性约束,如 firstname = ?0 or (firstname = ?1
and lastname = ?2).
ii. 只支持字符串 start/contains/ends/regex 匹配和其他属性类型的精确匹
配。
实现:
1.将Repository继承QueryByExampleExecutor
2.测试代码
Specifications
在之前使用QuerybyExample只能针对字符串进行条件设置,那如果希望对所有类型支持,可以使用Specifications。
实现
1.继承接口JpaSpecificationExecutor
测试:
Root:查询哪个表(关联查询) = from
CriteriaQuery:查询哪些字段,排序是什么 =组合(order by . where )
CriteriaBuilder:条件之间是什么关系,如何生成一个查询条件,每一个查询条件都是什么类型(> between in…) = where
Predicate(Expression): 每一条查询条件的详细描述。
Querydsl:
QueryDSL是基于ORM框架或SQL平台上的一个通用查询框架。借助QueryDSL可以在任何支持的ORM框架或SQL平台上以通用API方式构建查询。
JPA是QueryDSL的主要集成技术,是JPQL和Criteria查询的代替方法。目前QueryDSL支持的平台包括JPA,JDO,SQL,Mongodb 等等。。。
Querydsl扩展能让我们以链式方式代码编写查询方法。该扩展需要一个接口QueryDslPredicateExecutor,它定义了很多查询方法。
接口继承了该接口,就可以使用该接口提供的各种方法了。
customerQueryDSLRepository
引入依赖
版本号:
添加maven插件
这个插件是为了让程序自动生成query type(查询实体,命名方式为:“Q”+对应实体名)。
执行mvn compile之后,可以找到该target/generated-sources/java,然后IDEA标示为源代码目录即可.
测试:
总结:这么多方法掌握一种即可,这里建议掌握JPQL方式就行