【JPA】Springboot持久层支持
(1)JPA概念
JPA(Java Persistence API)是Sun官方提出的Java持久化规范,用来方便大家操作数据库。
真正干活的可能是Hibernate,TopLink等等实现了JPA规范的不同厂商,默认是Hibernate。
(2)Springboot整合JPA的小Demo
(2.1)添加依赖
<!-- jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
(2.2)给pojo实体类Category添加注解
增加一个包:com.how2java.springboot.pojo,然后创建实体类。
@Entity 注解表示这是个实体类
@Table(name = “category_”) 表示这个类对应的表名是 category_
@Id 表明主键
@GeneratedValue(strategy = GenerationType.IDENTITY) 表明自增长方式
@Column(name = “id”) 表明对应的数据库字段名
(2.3)给持久层继承JPA的类
继承了JpaRepository,并且提供泛型<Category,Integer> 表示这个是针对Category类的DAO,Integer表示主键是Integer类型。
JpaRepository 这个父接口,就提供了CRUD,分页等等一系列的查询了,直接拿来用,都不需要二次开发的了。
public interface CategoryDAO extends JpaRepository<Category,Integer>{
}
(3)JPA的源码深入分析
(3.1)JPA的源码
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S var1);
<S extends T> Iterable<S> saveAll(Iterable<S> var1);
Optional<T> findById(ID var1);
boolean existsById(ID var1);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable<? extends T> var1);
void deleteAll();
}
值得注意:JPA 新增和修改用的都是save。