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 cloud: Hystrix(三):健康指数 health Indicator
- spring boot: freemarket模板引擎
- spring boot: 一般注入说明(四) Profile配置,Environment环境配置 @Profile注解
- 进击的 Spring Cloud Alibaba —— 框架与服务
- [Spring boot] Configuring and Accessing a Data Source
- 前台项目基础框架之spring boot后端(spring boot v2.5.4)
- spring boot单元测试之四:单元测试中测试文件上传(spring boot 2.4.3)
- spring boot对输入的字符串进行html转码
- spring boot 启动遇到报错:Failed to configure a DataSource
- 初识spring boot
- [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction
- spring boot: 通过filter过滤器实现中文的简体繁体字符集转换(spring boot 2.3.1)
- spring boot:redis+lua实现生产环境中可用的秒杀功能(spring boot 2.2.0)
- 详解Spring Boot 2.X使用缓存@Cacheable代码示例
- Docker with Spring Boot
- Spring Boot:Data Rest Service
- Spring Boot:定制HTTP消息转换器
- 深入理解Spring Redis的使用 (五)、常见问题汇总
- Spring Boot 之Thymeleaf的爆红用注解【<!--/*@thymesVar id=“data“ type=“ch“*/-->】解决
- 13_Spring Boot 使用Filter(了解)
- 【异常】spring-boot-starter-data-elasticsearch 解决远程主机强迫关闭了一个现有的连接。
- 学习Spring Boot:(一)入门
- 毕业设计 Spring Boot的驾校预约管理系统(含源码+论文)
- 解决com.alibaba.fastjson.JSONException: write javaBean error问题以及解决Spring Boot加入Shiro导致spring aop失效的问题
- 005-html+js+spring multipart文件上传
- 001-Spring Cloud Edgware.SR3 升级最新 Finchley.SR1,spring boot 1.5.9.RELEASE 升级2.0.4.RELEASE注意问题点
- 010-Spring Boot 扩展分析-ApplicationContextInitializer、CommandLineRunner、ApplicationRunner
- spring boot , spring security 安全的认证
- 【Spring6】| Spring对事务的支持
- 【java】Spring Boot --spring boot项目整合xxl-job