Spring in Action 5th 006使用JPA与数据打交道

Spring Data是一个大的项目集合,其中包含多个子项目:

1. Spring Data JPA 面向关系型数据库的持久化问题

2. Spring Data MongoDB 面向Mongo文档性数据库

3. Spring Data Neo4j 面向Neo4j图数据库

4. Spring Data Redis 面向Redis键值对数据库

5. Spring Data Cassandra 面向Cassandra数据库持久化

 

Spring Data JPA

 

添加依赖

Spring in Action 5th 006使用JPA与数据打交道

依赖项内部附带了Hibernate的实现,如果需要实现其他的方式,可以进行替换:

Spring in Action 5th 006使用JPA与数据打交道 

 

准备Domain类

 

为domain类添加适当的注解

Spring in Action 5th 006使用JPA与数据打交道

使用@Entity标记domain类为实体类,使用@Id标记指定属性为主键。

 

Spring in Action 5th 006使用JPA与数据打交道

@GeneratedValue注解表明这个id字段要求数据库自动生成,并且strategy = GenerationType.AUTO 生成策略是自动

@ManyToMany注解表明本类和指定类存在多对多的关系,targetEntity指定的另外一个类的名称

@PrePersist注解的含义是在数据持久化之前执行的代码,先设置createAt字段的值为当前时间。

 

Spring in Action 5th 006使用JPA与数据打交道

默认情况下,JPA会根据类名持久化到对应的表里,但是由于Taco_Order比较特殊,所以使用@Table注解指定需要持久化的表名

 

准备仓储类

 

Spring in Action 5th 006使用JPA与数据打交道

Spring in Action 5th 006使用JPA与数据打交道 

Spring in Action 5th 006使用JPA与数据打交道 

继承CrudRepository<class, id_Class>实现仓储接口,第一个参数是要存储的类型,第二个参数是主键的类型。

 

准备仓储接口的实现类

 

按照JdbcTemplate的写法,这一步的确需要写具体实现类了,但是,但是!JPA不需要!!!

但是,我们如果需要一些特殊的仓储方法呢?

比如,我们需要根据邮编获取指定的邮件:

Spring in Action 5th 006使用JPA与数据打交道

我们需要根据邮编与日期范围查找邮件:

Spring in Action 5th 006使用JPA与数据打交道

 

JPA对方法的解析过程:

Spring in Action 5th 006使用JPA与数据打交道

我们可以使用get,read,find去查找数据,使用count计数

其他常用的方法名称:

Spring in Action 5th 006使用JPA与数据打交道

Spring in Action 5th 006使用JPA与数据打交道

忽略大小写:

Spring in Action 5th 006使用JPA与数据打交道

排序:

Spring in Action 5th 006使用JPA与数据打交道

使用@Query注解查询指定的邮件:

Spring in Action 5th 006使用JPA与数据打交道