1.Jpa需要的依赖-pom文件
<dependencies>
<!-- hibernate 依赖 -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.1.Final</version>
</dependency>
<!-- mysql 驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
2.重要的 persistence.xml 目录绝对
<class>标签自加
<persistence-unit name=""> name可以自己决定
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="NewPersistenceUnit">
<!--
配置使用什么ORM 产品作为JPA 的实现
1.实际上配置的是 javax.persistence.spi.PersistenceProvider 接口的实现类
2.若JPA项目中只有一个JPA的实现产品,则也可以不配置该节点。
-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.example.jpa_demo.pojo.HolleWorldJpa</class>
<class>com.example.jpa_demo.pojo.TestPojo</class>
<!-- 添加持久化类-->
<properties>
<!-- 连接数据库的基本信息 -->
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/Jpa?useSSL=false&serverTimezone=Asia/Shanghai"/>
<property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
<property name="hibernate.archive.autodetection" value="class"/>
<!-- 配置JPA 实现产品的基本属性,配置hibernate 的基本属性 -->
<!-- 自动显示SQL -->
<property name="hibernate.show_sql" value="true"/>
<!-- 格式化sql -->
<property name="hibernate.format_sql" value="true"/>
<!--生成数据表的策略-->
<property name="hibernate.hbm2ddl.auto" value="update"/>
<!-- 使用 MySQL8Dialect -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
</properties>
</persistence-unit>
</persistence>
3.创建Jpa持久化pojo类实例
//关联数据表
@Table(name = "JPA_HelloWorld")
//持久化类
@Entity
public class HolleWorldJpa {
private Integer id;
private String lastName;
private int age;
private String email;
// 2.映射主键及数据列(在get方法上)
// 数据列的列名( 如果相同可不写 )
// @Column(name = "ID")
// 生成主键的方式
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
@Column(name = "Last_Name")
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
//映射单向n-1关系
// @JoinColumn(name = "courser_id")
// @ManyToOne
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
}
4.jpa基本流程
单独实例
package com.example.jpa_demo;
import com.example.jpa_demo.pojo.HolleWorldJpa;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
/**
* @author Mr.p
* @date 2021/8/11 - 10:54
*/
public class Main {
public static void main(String[] args){
// 1.创建 EntityManagerFactory
String persistenceUnitName = "NewPersistenceUnit";
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
// 2.创建 EntityManager
EntityManager entityManager = entityManagerFactory.createEntityManager();
// 3.开启事务
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
// 4.进行持久化操作
HolleWorldJpa holleWorldJpa = new HolleWorldJpa();
holleWorldJpa.setAge(14);
holleWorldJpa.setEmail("pellily@qq.com");
holleWorldJpa.setLastName("pellily");
entityManager.persist(holleWorldJpa);
// 5.提交事务
transaction.commit();
// 6. 关闭 EntityManager
entityManager.close();
// 7. 关闭 EntityManagerFactory
entityManagerFactory.close();
}
}
5.Jpa-API
merge 复制游离对象(new出并赋值但是未录入的对象)到新的对象并且持久化(录入数据库)
6.映射关联
1.单向多对一 @ManyToOne
基础的写法注解
@ManyToOne
@JoinColumn(name = "HOLLEWORLD_id")
//多对一映射
public HolleWorldJpa getHolleWorldJpa() {
return holleWorldJpa;
}
public void setHolleWorldJpa(HolleWorldJpa holleWorldJpa) {
this.holleWorldJpa = holleWorldJpa;
}
模拟保存操作
模拟删除操作(有外键,不能随便删除)
2.双向多对一 @OneToMany
3.双向一对一@OneToOne
保存操作
4.双向多对多@ManyToMany
需要映射中间表表名 table joinColums表示映射当前表 默认懒加载
7.二级缓存
8.JPQL
实例
查询缓存
关联查询
去掉fetch返回LIst类型 (如果返回多条数据)
子查询
JPQL的函数方法
更新操作
目录
springboot 整合JPA
Spring Boot 整合 JPA - 云+社区 - 腾讯云 (tencent.com)
目录