Spring Boot中Spring data注解的使用
文章目录
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 {
@Id
Long id;
// ...
}
@Transient
通过使用@Transient, 表明Entity的某个字段是不需要被存储的。
class Person {
// ...
@Transient
int age;
// ...
}
@CreatedBy, @LastModifiedBy, @CreatedDate, @LastModifiedDate
通过这些注解,我们可以从principals中获得相应的数据:
public class Person {
// ...
@CreatedBy
User creator;
@LastModifiedBy
User modifier;
@CreatedDate
Date createdAt;
@LastModifiedDate
Date 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
更多教程请参考 flydean的博客
Spring Boot中Spring data注解的使用的更多相关文章
- Spring boot 中Spring data JPA的应用(一)
最近一直在研究Spring Boot,今天为大家介绍下Spring Data JPA在Spring Boot中的应用,如有错误,欢迎大家指正. 先解释下什么是JPA JPA就是一个基于O/R映射的标准 ...
- Spring Boot中使用MyBatis注解配置详解(1)
之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...
- 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- 在Spring Boot中使用 @ConfigurationProperties 注解
但 Spring Boot 提供了另一种方式 ,能够根据类型校验和管理application中的bean. 这里会介绍如何使用@ConfigurationProperties.继续使用mail做例子. ...
- Spring Boot 中使用 @Transactional 注解配置事务管理
事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...
- 在Spring Boot中使用 @ConfigurationProperties 注解, @EnableConfigurationProperties
但 Spring Boot 提供了另一种方式 ,能够根据类型校验和管理application中的bean. 这里会介绍如何使用@ConfigurationProperties.继续使用mail做例子. ...
- Spring Boot中使用@Transactional注解配置事务管理
事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...
- Spring boot中相关的注解
一.相关类中使用的注解 @RestController:REST风格的控制器 @RequestMapping:配置URL和方法之间的映射 @SpringBootApplication:应用程序入口类 ...
- spring boot中的jave注解学习
在spring中,不仅框架作者会使用java注解,开发者也常使用. 可以随手给个例子:在org.springframework.boot.autoconfigure.jdbc.DataSourcePr ...
随机推荐
- MFC 工具栏ToolBar
一.创建工具栏 1.在MFC工程,找到“资源视图”界面,右键添加资源,选择Toolbar,点击新建: 2.修改工具条属性: 3.添加工具: 新建ToolBar后,会自动生成一个工具,编辑ID后,工具条 ...
- 面试总结:关于MySQL事务的10个问题常见面试问答(FQA)
学习关系型数据库MySQL是很好的切入点,大部分人工作中用惯了CRUD,对面试官刨根问底的灵魂拷问你还能对答如流吗?我们有必要了解一些更深层次的数据库基础原理. 文章每周持续更新,各位的「三连」是对我 ...
- ELK数据批量导入
数据批量导入 • 使用 _bulk 批量导入数据 – 批 ...
- php 分页使用limit还是用mysql_data_seek()呢?
目前大部分教程中介绍的时LIMIT方法,使用这种方法要认识到以下几点: (1)limit不是标准的sql语句; (2)如果选择使用limit,那么您就必须首先向数据库发送一个查询语句来获取记录的总数, ...
- python3(二十) module
# 在Python中,一个.py文件就称之为一个模块(Module) # 1.最大的好处是大大提高了代码的可维护性. # 2.可以被其他地方引用 # 3.python内置的模块和来自第三方的模块 # ...
- 1、jmeter语言设置、版本颜色
- C# 基础知识系列- 9 字符串的更多用法(二)
0. 前言 上一篇文章介绍了字符串自身的一些方法,就是对象方法.在字符串体系中,还有一些是string类提供的静态方法.这两部分构成了字符串体系,当然还有一些三方库为字符串提供了扩展方法. 这里简单的 ...
- VirtualBox的四种网络连接方式【转】
VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是 ...
- https的秘钥公钥以及之间的会话流程
一 共享秘钥 1.1 概念 共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输中的缺点 以共享密钥方式加密时 ...
- 软件包管理rpm和yum
rpm的使用: 安装的包相关包信息会保存在/var/lib/rpm目录下的文件中 安装参数: -i install安装 -v 显示详细信息 -h 打印####号 -V 校验软件包,会到/var/lib ...