JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成
Persistence对象
Persistence对象主要作用是用于获取EntityManagerFactory对象的
EntityManagerFactory
EntityManagerFactory 接口主要用来创建 EntityManager 实例
EntityManager
在 JPA 规范中, EntityManager是完成持久化操作的核心对象
getTransaction : 获取事务对象
persist : 保存操作
merge : 更新操作
remove : 删除操作
find/getReference : 根据id查询
EntityTransaction
begin,commit,rollback
使用
创建classpath:META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--持久化单元名称-->  <!--事务类型-->
    <persistence-unit  name="jpa" transaction-type="RESOURCE_LOCAL">
        <!--实现方式-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <!--数据库信息-->
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="123"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///ssm"/>
            <!--实现方信息-->
            <property name="hibernate.show_sql" value="true"/>
            <!--create:每次启动都会创建(存在则删除) update:不存在表则创建 none:不操作-->
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>
创建实体类
@Entity
@Table(name = "cst_customer")
@Data
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cust_id")
    /*
    * IDENTITY:底层数据库必须支持自动增长
    * SEQUENCE: 底层数据库必须支持序列
    * TABLE:jpa提供的机制
    * AUTO:由程序自动选择策略
    * */
    private Long custId;
    @Column(name = "cust_name")
    private String custName;
    @Column(name = "cust_source")
    private String custSource;
    @Column(name = "cust_level")
    private String custLevel;
    @Column(name = "cust_industry")
    private String custIndustry;
    @Column(name = "cust_phone")
    private String custPhone;
    @Column(name = "cust_address")
    private String custAddress;
    
}
操作
- 添加
        EntityManager manager = Persistence
        .createEntityManagerFactory("jpa").createEntityManager();
        EntityTransaction tx = manager.getTransaction();
        tx.begin();
        Customer customer = new Customer();
        customer.setCustName("老王");
        customer.setCustIndustry("隔壁");
        manager.persist(customer);
        tx.commit();
        manager.close();
- 根据ID查询
Customer customer = entityManager.find(Customer.class, 1L); // 立即加载
Customer customer = entityManager.getReference(Customer.class, 1L); // 延迟加载
- 删除
Customer customer = entityManager.find(Customer.class, 1L);
entityManager.remove(customer);
- 更新
Customer customer = entityManager.find(Customer.class, 2L);
customer.setCustName("老王八");
entityManager.merge(customer);
JPQL
基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL
- 查询全部
String jpql = "FROM Customer ";
List list = entityManager.createQuery(jpql).getResultList();
for (Object o : list) {
    System.out.println(o);
}
- 倒序查询
FROM Customer ORDER BY custId DESC
- 统计查询
SELECT COUNT(custId) FROM Customer
- 分页查询
String jpql = "FROM Customer";
List list = entityManager.createQuery(jpql)
                .setFirstResult(0)
                .setMaxResults(2).getResultList();
- 条件查询
String jpql = "FROM Customer WHERE custName LIKE ?1";
List list = entityManager.createQuery(jpql)
                .setParameter(1,"%李%")
                .getResultList();