Spring Boot中Spring data注解的使用
2020/2/28 17:15:34
本文主要是介绍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, 我们可以指定其他的目录。
本文的例子可以参考:github.com/ddean2009/l…
更多教程请参考 flydean的博客
这篇关于Spring Boot中Spring data注解的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27JavaScript面试真题详解与解答
- 2024-12-27掌握JavaScript大厂面试真题:新手入门指南
- 2024-12-27JavaScript 大厂面试真题详解与解析
- 2024-12-26网络攻防资料入门教程
- 2024-12-26SQL注入资料详解:入门必读教程
- 2024-12-26初学者指南:数据库服务漏洞项目实战
- 2024-12-26网络安全项目实战:新手入门指南
- 2024-12-26网络攻防项目实战入门教程
- 2024-12-26信息安全项目实战:从入门到初步应用
- 2024-12-26SQL注入项目实战:初学者指南