简单的来学习一下springData,它主要是用来简化数据库访问,它支持关系型数据库,还支持NoSql存储。这里主要记一下springData和JPA的融合。JPA本来用起来是比较麻烦的,和spring Data配合起来,就产生了奇妙的反应。
先说明一下,这篇文章不是入门,只是我自己串一下知识点,帮助自己记忆的。
springData 能给我们带来的好处是,让我们的Dao层的编写变得异常简单。这是springData替我们把这些工作做了。
# # 具体步骤:
- 配置spring整合JPA
- 在spring配置文件中配置springData(开启扫描)
- 声明持久层接口,该接口继承Repository
- 在接口中声明需要的方法
# # 说说Repository接口,它有如下子接口:
# # Repository子接口:CrudRepository:
这个接口里边主要是增加了一些增删改查的方法
# # Repository子接口:PagingAndSortingRepository:(帮助实现分页查询)
还可以对查询的结果进行排序
# # JpaSpecification接口,它是一个特殊的接口,它是用来实现带查询条件的分页查询,但是它并不是Repository体系。
可以看到调用的是findAll方法,里边需要传两个参数。一个是查询条件,一个是分页信息。
# # 如何给指定的Repository子接口添加自定义的方法
注意名字一定是照应的,这样才是符合规则的
最后一步:总是继承 Repository的子接口和我们自定义的接口。
# # Repository子接口中声明方法不是随便声明的,规则如下:
- 查询方法以 find read get开头都可以
- 涉及条件查询时,条件的属性用条件的关键字连接,并且条件属性以首字母大写。
- 支持级联操作查询,但是如果当前类有符合条件的属性,就优先使用自己类的属性,而不使用级联的属性。
- 如果一定要使用级联的属性,就用下划线 _ 去连接
以上的规则,来一个小demo
# # 说说Repository中支持的关键字,符合规范的接口方法,可以不自己实现。
对关键字不明白的,或者想看更具体的:我这里提供一个链接
https://www.jianshu.com/p/aebc011fcb7d
# # 可能比和我感觉到了这似乎并没有太轻松,虽然不用自己去实现了,但是各种各样的规则来了。
于此同时还有一些其他的问题,比如子查询
解决办法就是使用 @query注解,自定义JPQL语句,实现更灵活的的查询。案例如下:
复杂度上似乎是解决了,但是新的问题又来了,如何传递参数呢,如下:
同时,模糊查询也是支持的:
想要使用原生的sql查询也是可以的
# # 使用@Modifying注解帮助完成自定义语句查询操作