【Spring技术栈】初识Spring Data JPA

一、什么是JPA

1、JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

  • 实现:EclipseLink、Hibernate、Apache OpenJPA

二、JPA核心概念

1、实体
- 实体表示关系数据库中的表
- 每个实体实例对应于该表中的行
- 类必须用javax.persistense.Entity注解
- 类必须有一个public或者protected的无参数的构造函数
- 实体实例被当作值以分离对象方式进行传递(例如通过会话bean的远程业务接口),则该类必须实现Serializable接口
- 唯一的对象标识符:简单主键(javax.persistence.Id)、复合主键(javax.persistence.Embeddedld和javax.persistence.IdClass)

2、关系
- 一对一
- 一对多
- 多对一
- 多对多

3、EntityManager
EntityManager接口

  • 定义用于与持久性上下文进行交互的方法
  • 创建和删除持久实体实例,通过实体的主键查找实体
  • 允许在实体上运行查询

获取EntityManager实例

@PersistenceUnit
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try{
    utx.begin();
    em.persist(SomeEntity);
    em.merge(AnotherEntity);
    em.remove(ThirdEntity);
    em.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数据访问技术栈的应用程序

Spring Data JPA常用接口

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);

        // 启用ORDER BY
        List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
        List<Person> findByLastnameOrderByFirstnamedDesc(String lastname);
}

四、Spring Data JPA、Hibernate与Spring Boot集成

1、添加依赖
Spring Data JPA 与Mysql连接驱动依赖的依赖

2、自定义Hibernate版本
自定义Hibernate版本
3、添加配置
添加DataSource以及JPA的配置

猜你喜欢

转载自blog.csdn.net/a911711054/article/details/81814175
今日推荐