Spring Data 简介
Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问技术,包括非关系数据库、
Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持
Spring Data JPA是Spring Data的子项目,如下图,用于关系型数据库的操作,本文将会结合spring-boot使用,故标题叫spring-boot-jpa
官网介绍:https://spring.io/projects/spring-data
SpringData特点
SpringData为我们提供使用统一的API来对数据访问层进行操作;这主要是Spring Data
Commons项目来实现的。 Spring Data Commons让我们在使用关系型或者非关系型数据访问
技术时都基于Spring提供的统一标准,标准包含了CRUD(创建、获取、更新、删除)、查询、
排序和分页的相关操作。
1.Spring Data JPA 统一的Repository接口
Repository<T, ID extends Serializable>:统一接口
-
基于乐观锁机制:RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>>
- 基本CRUD操作:CrudRepository<T, ID extends Serializable>
- 基本CRUD及分页:PagingAndSortingRepository<T, ID extends Serializable>
2.Spring Data JPA
1)、 JpaRepository基本功能
编写接口继承JpaRepository既有crud及分页等基本功能
2)、定义符合规范的方法命名
在接口中只需要声明符合规范的方法,即拥有对应的功能,注意方法名必须根据提示写,否则无效
3)、 @Query自定义查询,定制查询SQL
4)、 Specifications查询(Spring Data JPA支持JPA2.0的Criteria查询)
SpringDataJpa与JPA规范
JPA规范是J2EE的一个规范,也成为JSR 317 包含使用注解简化数据库操作,而实现又非常多
例如JPA规范至少有3种实现方法(hibernate,toplink,openjpa),SpringDataJpa对这3种实现进行封装,会1个等于会3个,这这样简化了底层数据的访问,默认用hibernate访问数据库
3.详细使用
3.1 实体类 entity
@Entity(name = "tb_item")//表名
public class ItemEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, columnDefinition = "varchar(100) COMMENT '商品标题'")
private String title;
@Column(precision = 10, scale = 4, columnDefinition = "COMMENT '商品价格,单位为:分'")
// 整数位数是10-4=6位,超过及报错,小数是4位,不足补0,超过就四舍五入
private BigDecimal price;
}
3.2 Repository
@Repository
public interface ItemRepository extends JpaRepository<ItemEntity, Long> {
}
3.3 基本配置 yml
spring:
jpa:
hibernate:
# 更新或者创建数据表结构
ddl-auto: update
# 控制台显示SQL
show-sql: true
3.4 entity与mysql数据库类型映射
3.5 遗留问题
LocalDateTime 默认字符串格式是 2019-11-23T21:44:41.645
不知道为什么,用如下方式不生效
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8