JPA 和 Spring Data JPA
程序员文章站
2022-03-02 15:40:31
...
JPA
JPA名词解释:
- JPA(Java Persistence API) 是用于管理Java EE和Java SE环境中的持久化,以及对象/关系映射的Java API,具体实现有Hibernate、EclipseLink、Apache OpenJPA
JPA核心概念:
- 实体表示关系数据库中的表
- 每个实体实例对应于该表中的行
- 类必须用javax.persistence.Entity注解
- 类必须有一个public或protected的无参数的构造函数
- 实体实例被当作值以分离对象方式进行传递(例如通过会话bean的远程业务接口),则该类必须实现Seriializable接口
- 唯一的对象标识符,简单主键(javax.persistence.Id)、复合主键(javax.persistence.EmbeddedId和javax.persistence.IdClass)
- 关系:
一对一:@OneToOne
一对多:@OneToMany
多对一:@ManyToOOne
多对多:@ManyTomany
- EntityManger接口:
定义用于与持久性上下文进行交互的方法
创建和删除持久实体实例,通过实体的主键查找实体
允许在实体上运行查询
- 获取EntityManger实例
@PersistenceUnit
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try {
utx.begin();
em.persist(SomeEntity);
em.merge(AnotherEntity);
em.remove(ThirdEntity);
utx.commit();
} catch (Exception e) {
utx.rollback();
}
- 查找实体
@PersistenceContext
EntityManager em;
public void enterOrder(int custID, CustomerOrder newOrder) {
Customer cust = em.find(Customer.class, custID);
cust.getOrders().add(newOrder);
newOrder.setCustomer(cust);
}
Spring Data JPA
什么是Spring Data JPA:
- 是更大的Spring Data家族的一部分
- 对基于JPA的数据访问层的增强支持
- 更易于构建基于使用Spring数据访问技术栈的应用程序
常用接口:
- 增删改查:
CrudRepository
public interface CrudRepository<T,ID extends Serializable>
extends Repository<T,ID> {
<S extends T> S save(S entity);
T findOne(ID primaryKey);
Iterable<T> findAll();
Long count();
void delete(T entity);
boolean exists(ID primaryKey);
}
- 分页/排序:
PagingAndSortingRepository
public interface PagingAndSortingRepository<T,ID extends Serializable>
extends CrudRepository<T,ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
- 自定义接口:根据方法名创建查询
public interface PersonRepository extends Repository<User,Long>{
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// 启用 distinct 标志(去重:放在前面后面都可以)
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// 给独立的属性启用 ignore case(忽略大小写)
List<Person> findByLastnameIgnoreCase(String lastname);
// 给所有合适的属性启用 ignore case
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
// 启用 ORDER BY(排序)
List<Person> findByLastnameOrderByFirsnameAsc(String lastname);
List<Person> findByLastnameOrderByFirsnameDesc(String lastname);
}
Spring Data JPA 、Hibernate与Spring Boot 集成
修改build.gradle
// 添加 Spring Data JPA依赖
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// 添加 MySQL连接驱动依赖
runtimeOnly 'mysql:mysql-connector-java'
转载于:https://www.jianshu.com/p/ee6c46afe4c5
上一篇: AOP日志管理
推荐阅读
-
spring-data-jpa实现增删改查以及分页操作方法
-
详解Spring Data JPA使用@Query注解(Using @Query)
-
Spring Data JPA使用Sort进行排序(Using Sort)
-
详解Spring Data JPA系列之投影(Projection)的用法
-
详解spring boot jpa整合QueryDSL来简化复杂操作
-
spring data jpa使用详解(推荐)
-
javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful
-
Spring-Data-JPA整合MySQL和配置的方法
-
Spring Data JPA例子代码[基于Spring Boot、Mysql]
-
Spring Data JPA学习