文章目录

  • 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注解的使用相关推荐

  1. Spring Boot中使用MyBatis注解配置详解

    之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...

  2. spring boot中@ResponseBody等注解的作用与区别

    在使用springmvc框架的时候,在处理json的时候需要用到spring框架特有的注解@ResponseBody或者@RestController注解,这两个注解都会处理返回的数据格式,使用了该类 ...

  3. 面试:Spring Boot 中的条件注解底层是如何实现的?

    SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...

  4. 在Spring Boot中使用 @ConfigurationProperties 注解

    @ConfigurationProperties根据类型校验和管理application中的bean. Spring Boot 使用一些松的规则来绑定属性到@ConfigurationProperti ...

  5. Spring Boot 中使用 @Transactional 注解配置事务管理

    From: https://blog.csdn.net/nextyu/article/details/78669997 事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功 ...

  6. Java笔记-Spring Boot中Spring WS WS-Addressing中@Action实例

    此笔记为利用Spring WS的WS-Addressing发送SOAP请求及接收其响应. WS-Addressing(Web服务寻址):传送Web服务端点的引用的数据结构,以及一套能够在特定的消息上关 ...

  7. 在Spring Boot中使用 @ConfigurationProperties 注解 (二十六)

    @ConfigurationProperties主要作用:就是绑定application.properties中的属性 java代码 @Configuration public class DataS ...

  8. Spring Boot中的缓存支持(一)注解配置与EhCache使用

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  9. Spring Boot中声明式数据库事务使用与理解

    JDBC的数据库事务 传统JDBC的数据库事务的一个示例如下代码所示,该示例仅为一个insertUser方法的数据库事务过程.可以看到,如果还存在很多其他的数据库事务需要,则需要编写很多类似于如下的代 ...

最新文章

  1. 谁是第三者之- Activity、Window、View
  2. 使用Dockerfile制作镜像
  3. 10000 字讲清楚 Spring Boot 注解原理
  4. mysql 数据透视_sql怎么做数据透视表
  5. MemCache对PHP页面的缓存加速优化
  6. 二线水温传感器怎么检测_水温传感器出现故障,发动机真的会限矩吗?本文告诉你答案...
  7. 电子书及阅读器Demo
  8. 一维非稳态常系数热传导方程(第一类边界条件)
  9. 基于java快递公司电子面单打印接口文档
  10. 大学教师与大学学生的彼此期望
  11. CCPC 合肥站 打铁记
  12. linux下运行icem脚本,肿么安装linux版的icem
  13. 亚马逊常见的报错问题应该如何处理?
  14. 张一鸣:积极乐观的心理期待,对成功有害!
  15. 一文看懂怎么用 Python 做数据分析
  16. 导弹追踪飞机c语言编程,防御导弹 (C语言代码)
  17. css纯代码实现圆边框和圆按钮
  18. 我们可以从挑战者灾难中学到什么关于网络安全的知识?一切。
  19. itunes更新固件常用路径
  20. 多媒体封装格式详解---MP4

热门文章

  1. 数据挖掘竞赛-轴承故障检测训练赛
  2. css div里引用em字体会变斜体_前端开发中7种必要了解的CSS长度单位
  3. shell脚本报错:-bash: xxx: /bin/sh^M: bad interpreter: No such file or directory
  4. Windows Socket五种I/O模型详细介绍(精)
  5. WebRTC 中收集音视频编解码能力
  6. 浅谈 FTP、FTPS 与 SFTP
  7. python中的with上下文管理器
  8. 今年你参与开源了吗?
  9. 经典算法刷题笔记pdf
  10. 架构 | 微服务架构下如何解耦,对于已经紧耦合下如何重构?