JPA使用基本步骤
1.环境搭建
(1). pom.xml配置
在创建spring boot项目时选择mysql驱动和JPA支持即可
(2). persistence.xml配置
在resource下创建META-INF文件夹(jpa默认配置路径),在该文件夹下创建persistence.xml文件,在设置中选择相应的模板导入,之后写入如下配置。
<!--
name:持久化单元名称,创建实体类管理工厂是需要使用
transaction-type:事务管理的方式
JPA:分布式事务管理
RESOURCE_LOCAL:本地事务管理
-->
<persistence-unit name="myjpa" transaction-type="RESOURCE_LOCAL">
<!--
jpa实现方式
数据库信息
可选配置:配置jpa实现方的配置信息
-->
<!--jpa实现方式 使用的hibernate-->
<provider >org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!--数据库信息
用户名 javax.persistence.jdbc.user
密码 javax.persistence.jdbc.password
驱动 javax.persistence.jdbc.driver
数据库地址 javax.persistence.jdbc.url
-->
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="javax.persistence.jdbc.user" value="root"/><!--不能用username-->
<property name="javax.persistence.jdbc.password" value="123456"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql:///sourcesharedb?serverTimezone=GMT%2B8"/><!--后面的时区必写-->
<!--jpa实现方的配置信息
显示sql语句 true\false
自动创建数据库表 hinernate.hbm2ddl.auto create 程序运行时创建数据库表(先删后创)
\update 程序运行时创建表(不删)
\none 不会创建表
-->
<property name="hinernate.show_sql" value="true"/>
<property name="hinernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
2.创建实体类并与数据库表映射
@Entity//声明实体类
@Data//相当于get/set方法
@Table(name=“user”)//实体类和表的映射关系
public class User {
@Id//主键声明
//@GeneratedValue(strategy = GenerationType.AUTO)主键生成策略//identity自增式增长需数据库底层支持/sequence 序列,需底层数据库支持()如果是自己设置的话建议不写这句
@Column(name="id_user")//表中字段与类属性的映射关系
private String id;
@Column(name="username")
private String name;
@Column(name="password")
private String password;
3.使用JPA对数据库实行增加操作
JPA操作步骤
- 1.加载配置文件,创建工厂(实体管理器工厂)
- 2.通过工厂获取实体管理器
- 3.获取事务对象,开启事务(增删改之前一定开启事务)
- 4.完成增删改查
- 5.提交事务或回滚事务
- 6.释放资源
- */
//加载配置文件,根据配置文件内容加载尸体管理器
EntityManagerFactory managerFactory=Persistence.createEntityManagerFactory(“myjpa”);
//通过实体管理器工厂获取实体管理器
EntityManager entityManager=managerFactory.createEntityManager();
//获取事务对象,开启事务
EntityTransaction transaction=entityManager.getTransaction();//获取事务对象
transaction.begin();//开启事务
//完成增删改查
User user=new User(“3370”,“张三”,“987654”);
//保存
entityManager.persist(user);//保存操作
//提交事务
transaction.commit();
//释放资源
entityManager.close();
managerFactory.close();
完成删改查
/*
* 根据id查询客户
*
* /
@Test
public void testFind(){
//1.获取尸体管理器对象
EntityManager entityManager=JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction transaction=entityManager.getTransaction();
transaction.begin();
//3.增删改查
/
* find:根据id查询数据
* class:查询数据的结果需要包装的实体类类型的字节码
* id:查询的主建名称
* 立即加载
* 可以用null来判断查询结果是否·为空
* */
User user=entityManager.find(User.class,“3370”);
//System.out.println(user);
//4.提交事务
transaction.commit();
//5.释放资源
entityManager.close();
}
@Test
public void testGetReference(){
//1.获取尸体管理器对象
EntityManager entityManager=JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction transaction=entityManager.getTransaction();
transaction.begin();
//3.增删改查
/*
(常用方法)
* getReference:根据id查询数据
* class:查询数据的结果需要包装的实体类类型的字节码
* id:查询的主建名称
*
* 1.获取的对象是一个动态代理
* 2.不会立即放松sql语句去查 当调用查询结果对象时才会发送sql语句
*
* 延迟加载(懒加载)
* *得到一个动态代理对象
* *什么时候用,什么时候查
* 如果查询结果为空,会返回代理对象值,无法用null来判断
* */
User user=entityManager.getReference(User.class,"3371");//查询得到代理对象
System.out.println(user);
//4.提交事务
transaction.commit();
//5.释放资源
entityManager.close();
}
@Test
public void testRemov(){
//1.获取尸体管理器对象
EntityManager entityManager=JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction transaction=entityManager.getTransaction();
transaction.begin();
//3.增删改查--删除
User user=entityManager.find(User.class,"3369");
entityManager.remove(user);//删除对象,需要先查询得到对象
//System.out.println(user);
//4.提交事务
transaction.commit();
//5.释放资源
entityManager.close();
}
@Test
public void testMerge(){
//1.通过工具类获取尸体管理器对象
EntityManager entityManager=JpaUtils.getEntityManager();
//2.开启事务
EntityTransaction transaction=entityManager.getTransaction();
transaction.begin();
//3.增删改查--更新
/*
* 先查询得到实体类对象,然后修改对象的属性,再执行更新操作
* */
User user=entityManager.find(User.class,"3370");
user.setPassword("123456");
entityManager.merge(user);//删除对象,需要先查询得到对象
//System.out.println(user);
//4.提交事务
transaction.commit();
//5.释放资源
entityManager.close();
}