Spring Boot中Spring data注解的使用
文章目录
- Spring Data Annotations
- @Transactional
- @NoRepositoryBean
- @Param
- @Id
- @Transient
- @CreatedBy, @LastModifiedBy, @CreatedDate, @LastModifiedDate
- Spring Data JPA Annotations
- @Query
- @Procedure
- @Lock
- @Modifying
- @EnableJpaRepositories
Spring Boot中Spring data注解的使用
Sring data JPA为我们提供了很多有用的注解,方便我们来实现各种复杂的功能。本文我们将会从Spring Data Annotations和Spring Data JPA Annotations两部分来讲解。
Spring Data Annotations
Spring Data Annotations是指这些注解来自于spring-data-commons包里面的。Spring Data不仅可以用于JPA, 它还有很多其他的数据提供方,JPA只是其中的一个具体实现。
@Transactional
使用@Transactional可以很简单的将方法配置成为Transactional:
@Transactional
void pay() {}
@Transactional可以放在方法上,也可以放在class上面,如果放在class上面则说明该class中的所有方法都适用于Transactional。
@NoRepositoryBean
有时候我们在创建父Repository的时候,我们不需要为该父Repository创建一个具体的实现, 我们只是想为子Repository提供一个公共的方法而已,这时候,我们就可以在父类上面加入@NoRepositoryBean注解:
@NoRepositoryBean
public interface ParentRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {Optional<T> findById(ID id);
}
子类如下:
@Repository
public interface ChildRepository extends ParentRepository<Person, Long> {}
@Param
我们可以通过使用@Param从而在Query语句中传递参数:
@Query("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);
@Id
@Id表示Entity的primary key:
class Person {@IdLong id;// ...}
@Transient
通过使用@Transient, 表明Entity的某个字段是不需要被存储的。
class Person {// ...@Transientint age;// ...}
@CreatedBy, @LastModifiedBy, @CreatedDate, @LastModifiedDate
通过这些注解,我们可以从principals中获得相应的数据:
public class Person {// ...@CreatedByUser creator;@LastModifiedByUser modifier;@CreatedDateDate createdAt;@LastModifiedDateDate modifiedAt;// ...}
因为需要使用到principals,所有这些注解是和Spring Security配合使用的。
Spring Data JPA Annotations
Spring Data JPA Annotations是来自于spring-data-jpa包的。
@Query
通过使用@Query, 我们可以自定义SQL语句:
@Query("SELECT COUNT(*) FROM Person p")
long getPersonCount();
我们也可以传递参数:
@Query("FROM Person p WHERE p.name = :name")
Person findByName(@Param("name") String name);
我们还可以使用native SQL查询:
@Query(value = "SELECT AVG(p.age) FROM person p", nativeQuery = true)
int getAverageAge();
@Procedure
通过@Procedure, 我们可以调用数据库中的存储过程:
@NamedStoredProcedureQueries({ @NamedStoredProcedureQuery(name = "count_by_name", procedureName = "person.count_by_name", parameters = { @StoredProcedureParameter(mode = ParameterMode.IN, name = "name", type = String.class),@StoredProcedureParameter(mode = ParameterMode.OUT, name = "count", type = Long.class) })
})class Person {}
我们可以在Entity上面添加该注解。然后看下怎么调用:
@Procedure(name = "count_by_name")
long getCountByName(@Param("name") String name);
@Lock
通过使用@Lock,我们可以选择数据库的隔离方式:
@Lock(LockModeType.NONE)
@Query("SELECT COUNT(*) FROM Person p")
long getPersonCount();
Lock的值可以有如下几种:
- READ
- WRITE
- OPTIMISTIC
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- PESSIMISTIC_FORCE_INCREMENT
- NONE
@Modifying
@Modifying表示我们有修改数据库的操作:
@Modifying
@Query("UPDATE Person p SET p.name = :name WHERE p.id = :id")
void changeName(@Param("id") long id, @Param("name") String name);
@EnableJpaRepositories
通过使用@EnableJpaRepositories,我们来配置Japa Repository的相关信息:
@Configuration
@EnableJpaRepositories(basePackages = "com.flydean.repository")
public class PersistenceConfig {}
默认情况下,我们会在@Configuration类的子类中查找repositories,通过使用basePackages, 我们可以指定其他的目录。
本文的例子可以参考:https://github.com/ddean2009/learn-springboot2/tree/master/springboot-jpa
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
更多教程请参考 flydean的博客
Spring Boot中Spring data注解的使用相关推荐
- Spring Boot中使用MyBatis注解配置详解
之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...
- spring boot中@ResponseBody等注解的作用与区别
在使用springmvc框架的时候,在处理json的时候需要用到spring框架特有的注解@ResponseBody或者@RestController注解,这两个注解都会处理返回的数据格式,使用了该类 ...
- 面试:Spring Boot 中的条件注解底层是如何实现的?
SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...
- 在Spring Boot中使用 @ConfigurationProperties 注解
@ConfigurationProperties根据类型校验和管理application中的bean. Spring Boot 使用一些松的规则来绑定属性到@ConfigurationProperti ...
- Spring Boot 中使用 @Transactional 注解配置事务管理
From: https://blog.csdn.net/nextyu/article/details/78669997 事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功 ...
- Java笔记-Spring Boot中Spring WS WS-Addressing中@Action实例
此笔记为利用Spring WS的WS-Addressing发送SOAP请求及接收其响应. WS-Addressing(Web服务寻址):传送Web服务端点的引用的数据结构,以及一套能够在特定的消息上关 ...
- 在Spring Boot中使用 @ConfigurationProperties 注解 (二十六)
@ConfigurationProperties主要作用:就是绑定application.properties中的属性 java代码 @Configuration public class DataS ...
- Spring Boot中的缓存支持(一)注解配置与EhCache使用
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- Spring Boot中声明式数据库事务使用与理解
JDBC的数据库事务 传统JDBC的数据库事务的一个示例如下代码所示,该示例仅为一个insertUser方法的数据库事务过程.可以看到,如果还存在很多其他的数据库事务需要,则需要编写很多类似于如下的代 ...
最新文章
- 谁是第三者之- Activity、Window、View
- 使用Dockerfile制作镜像
- 10000 字讲清楚 Spring Boot 注解原理
- mysql 数据透视_sql怎么做数据透视表
- MemCache对PHP页面的缓存加速优化
- 二线水温传感器怎么检测_水温传感器出现故障,发动机真的会限矩吗?本文告诉你答案...
- 电子书及阅读器Demo
- 一维非稳态常系数热传导方程(第一类边界条件)
- 基于java快递公司电子面单打印接口文档
- 大学教师与大学学生的彼此期望
- CCPC 合肥站 打铁记
- linux下运行icem脚本,肿么安装linux版的icem
- 亚马逊常见的报错问题应该如何处理?
- 张一鸣:积极乐观的心理期待,对成功有害!
- 一文看懂怎么用 Python 做数据分析
- 导弹追踪飞机c语言编程,防御导弹 (C语言代码)
- css纯代码实现圆边框和圆按钮
- 我们可以从挑战者灾难中学到什么关于网络安全的知识?一切。
- itunes更新固件常用路径
- 多媒体封装格式详解---MP4
热门文章
- 数据挖掘竞赛-轴承故障检测训练赛
- css div里引用em字体会变斜体_前端开发中7种必要了解的CSS长度单位
- shell脚本报错:-bash: xxx: /bin/sh^M: bad interpreter: No such file or directory
- Windows Socket五种I/O模型详细介绍(精)
- WebRTC 中收集音视频编解码能力
- 浅谈 FTP、FTPS 与 SFTP
- python中的with上下文管理器
- 今年你参与开源了吗?
- 经典算法刷题笔记pdf
- 架构 | 微服务架构下如何解耦,对于已经紧耦合下如何重构?