文章目录
https://spring.io/projects/spring-data
JPA (java persistence api)
- JPA是一种ORM规范
- spring data jpa 是jpa的抽象层
- 由ORM框架提供JPA具体实现,如: hibernate,EclipseLink,open jpa,mybatis(不完整的orm框架),mybatisPlus相当于补全了mybatis ORM功能
Spring Data JPA
spring boot项目使用
依赖
<!--spring-data-jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
配置
spring:
datasource:
type: xxx
username: test
password: test
driver-class-name: xxx
jpa:
hibernate:
ddl-auto: update #ddl策略
show-sql: true #日志中显示sql语句
注解使用
1. entity实体类
//表明是实体类
@Entity
//实体类对应的表
@Table(name = "表名")
//实体类增删改的时候监听,为创建人/创建时间等基础字段赋值
@EntityListeners
public class JpaUser {
// 主键
@Id
// 对应数据列
@Column(name = "ID")
// 生成方式
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_sequence")
// 序列名
@SequenceGenerator(sequenceName = "USER_sequence", name = "USER_sequence", allocationSize = 1)
private Long id;
}
2. Repository层
// 继承JpaRepository
public interface xxxRepository extends JpaRepository<JpaUser, Long> {
}
3. service 层
@Service
public class xxxService {
@Resource
private xxxRepository xxxRepository;
public JpaUser insertUser(JpaUser user) {
return xxxRepository.save(user);
}
public void deleteUser(Long id) {
xxxRepository.deleteById(id);
}
public JpaUser updateUser(JpaUser user) {
return xxxRepository.save(user);
}
public List<JpaUser> findAllUser() {
return xxxRepository.findAll();
}
public JpaUser findUserById(Long id) {
return xxxRepository.findById(id).orElse(null);
}
}
4. Controller层
Spring Data REST
Spring Data REST 的适用场景:
- 增删改查的简单业务逻辑
- 前端数据和表结构内容对应
- 不含有复杂的关联查询
在Spring Data JPA基础上使用
spring boot项目使用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Repository层
@RepositoryRestResource(path="user")
public interface xxxRepository extends JpaRepository<JpaUser, Long> {
}
http请求
// 查询
GET host:api/user
GET host:api/user/{id}
GET host:api/user?page=1&size=10&sort=age,desc
// 新增
POST host:api/user
raw 对象json
//更新
POST host:api/user
raw 带id的对象json
//删除
DELETE host:api/user/{id}
Spring Data Rest Events 提供了AOP方式的开发,定义了10种不同事件。
资源保存前 @HandleBeforeCreate
资源保存后 @HandleAfterCreate
资源更新前 @HandleBeforeSave
资源更新后 @HandleAfterSave
资源删除前 @HandleBeforeDelete
资源删除后 @HandleAfterDelete
关系创建前 @HandleBeforeLinkSave
关系创建后 @HandleAfterLinkSave
关系删除前 @HandleBeforeLinkDelete
关系删除后 @HandleAfterLinkDelete