O/R Mapping
RDBMS : Relational database management system
Object | RDBMS | |
---|---|---|
粒度 | 类 | 表 |
继承 | 有 | 无 |
唯一性 | a==b a.equals(b) |
主键 |
关联 | 引用 | 外键 |
数据访问 | 逐级访问 | SQL数量要少 |
Hibernate
简介
- Hibernate是一款开源的O/R Mapping框架
- 将开发者从95%的常见数据持久化(简单的CRUD)工作中解放出来
- 屏蔽底层数据库(MySQL/Oracle/H2)的差异
发展历程
- 2001年,Hibernate发布第一个版本
- 2003年,Hibernate开发团队加入JBoss
- 2006年,Hibernate 3.2成为JPA实现
JPA
- JPA : Java Persistence API
- JPA为O/R Mapping提供了一种基于POJO的持久化模型
- 简化数据持久化代码的开发工作
- 为Java社区屏蔽不同持久化API(Hibernate/JDO/EJB)的差异
- 在2006年JPA 1.0作为JSR 220的一部分正式发布(JSR,Java Specification Request)
Spring Data
- Spring将与数据操作相关的内容剥离出Spring Framework,统一到Spring Data
- 在保留底层存储特性的同时,提供相对一致的,基于Spring的编程模型
- 主要模块:Spring Data Commons、Spring Data JDBC、Spring Data JPA、Spring Data Redis
- Spring Data JDBC – JdbcTemplate
- Spring Data Redis – RedisTemplate
1 | <dependency> |
JPA注解
- 实体
- @Entity
- @MappedSuperclass
- @Table
- 主键
- @Id
- @GeneratedValue(strategy, generator)
- @SequenceGenerator(name, sequenceName)
- @Id
- 映射
- @Column(name, nullable, length, insertable, updatable)
- @JoinTable(name)、@JoinColumn(name)
- 关系
- @OneToOne、@OneToMany、@ManyToOne、@ManyToMany
- @OrderBy
1 |
|
SpringBucks
UML
时序图

部署图

对象图

状态图

依赖
1 | <dependency> |
Entity
BaseEntity
1 |
|
Coffee
1 |
|
Order
1 |
|
application.properties
1 | spring.jpa.hibernate.ddl-auto=create-drop |
相关日志
1 | Hibernate: |
1 | Hibernate: create sequence hibernate_sequence start with 1 increment by 1 |
1 | Hibernate: |
Repository
1 |
|
定义查询
- find..by.. / find..by.. / query..by.. / get..by..
- count..by..
- ..OrderBy..[Asc/Desc]
- And / Or / IgnoreCase
- Top / First / Distinct
分页查询
- PagingAndSortingRepository<T, ID>
- Pageable / Sort
- Slice<T> / Page<T>
保存Entity
CoffeeRepository
1 | public interface CoffeeRepository extends CrudRepository<Coffee, Long> { |
OrderRepository
1 | public interface OrderRepository extends CrudRepository<Order, Long> { |
SpringDataJpaApplication
1 | 4j |
相关日志
1 | Hibernate: |
1 | Hibernate: |
1 | Hibernate: |
1 | Hibernate: |
查询Entity
BaseRepository
1 | // 告知Spring无需为BaseRepository创建Bean |
CoffeeRepository
1 | public interface CoffeeRepository extends BaseRepository<Coffee, Long> { |
OrderRepository
1 | public interface OrderRepository extends BaseRepository<Order, Long> { |
SpringDataJpaApplication
1 | private void findOrders() { |
相关日志
1 | Hibernate: |
1 | Hibernate: |
1 | Hibernate: |
1 | Hibernate: |