Day 04 -Spring Data JPA总结

Spring data jpa

ORM思想

​ 主要目的: 操作实体类就相当于操作数据库表

​ 建立两个映射关系:

​ 实体类和表的映射关系

​ 实体类中属性和表中字段的映射关系

​ 不在重点关注: sql语句

​ 实现ORM框架: mybatis , hibernate

JPA概述

​ JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。

​ JPA通过JDK 5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

在这里插入图片描述

​ JPA和Hibernate的关系就像JDBC和JDBC驱动的关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。JPA怎么取代Hibernate呢?JDBC规范可以驱动底层数据库吗?答案是否定的,也就是说,如果使用JPA规范进行数据库操作,底层需要hibernate作为其实现类完成数据持久化工作。

1.注解介绍

@Entity // 作为hibernate 实体类
@Table(name = "cst_customer")  // 映射的表明
public class CstCustomer implements Serializable {
   

    private static final long serialVersionUID = 1L;

    /**
     * @Id:声明主键的配置
     * @GeneratedValue:配置主键的生成策略
     *      strategy
     *          GenerationType.IDENTITY :自增,mysql
     *                 * 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增)
     *          GenerationType.SEQUENCE : 序列,oracle
     *                  * 底层数据库必须支持序列
     *          GenerationType.TABLE : jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增
     *          GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略
     * @Column:配置属性和字段的映射关系
     *      name:数据库表中字段的名称
     */
    @Id
    @Column(name = "cust_id", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long custId;
}

2.JPA的步骤

 /**
     * 测试jpa
     * jpa的操作步骤:
     * 1.加载配置文件的创建工厂(实体管理器工厂)对象
     * 2.通过实体管理器工厂获取实体管理器
     * 3.获取事务对象,开启事务
     * 4.完成增删改的操作
     * 5.提交事务(回滚事务)
     * 6.释放资源
     */
    @Test
    public void test1() {
   
        // 加载配置文件的创建工厂(实体管理器工厂)对象
        EntityManagerFactory hibernateJPA = Persistence.createEntityManagerFactory("hibernateJPA");
        // 获取实体类的管理器
        EntityManager entityManager = hibernateJPA.createEntityManager();
        // 获取事务
        EntityTransaction tx = entityManager.getTransaction();
        // 开启事务
        tx.begin();
        CstCustomer cstCustomer = new CstCustomer();
        cstCustomer.setCustName("wangqiwen");
        cstCustomer.setCustIndustry("教育");
        entityManager.persist(cstCustomer);
        // 提交事务
        tx.commit();
        // 释放资源
        entityManager.close();
        hibernateJPA.close();
    }		
jpa操作的操作步骤
	1.加载配置文件创建实体管理器工厂
			Persisitence:静态方法(根据持久化单元名称创建实体管理器工厂)
				createEntityMnagerFactory(持久化单元名称)
			作用:创建实体管理器工厂
	2.根据实体管理器工厂,创建实体管理器
		EntityManagerFactory :获取EntityManager对象
		方法:createEntityManager
		* 内部维护的很多的内容
			内部维护了数据库信息,
			维护了缓存信息
			维护了所有的实体管理器对象
			再创建EntityManagerFactory的过程中会根据配置创建数据库表
		* EntityManagerFactory的创建过程比较浪费资源
		特点:线程安全的对象
			多个线程访问同一个EntityManagerFactory不会有线程安全问题
		* 如何解决EntityManagerFactory的创建过程浪费资源(耗时)的问题?
		思路:创建一个公共的EntityManagerFactory的对象
		* 静态代码块的形式创建EntityManagerFactory
		
	3.创建事务对象,开启事务
		EntityManager对象:实体类管理器
			beginTransaction : 创建事务对象
			presist : 保存
			merge  : 更新
			remove : 删除
			find/getRefrence : 根据id查询
			
		Transaction 对象 : 事务
			begin:开启事务
			commit:提交事务
			rollback:回滚
	4.增删改查操作
	5.提交事务
	6.释放资源

i.搭建环境的过程
	1.创建maven工程导入坐标
	2.需要配置jpa的核心配置文件
		*位置:配置到类路径下的一个叫做 META-INF 的文件夹下
		*命名:persistence.xml
	3.编写客户的实体类
	4.配置实体类和表,类中属性和表中字段的映射关系
	5.保存客户到数据库中
ii.完成基本CRUD案例
	persist : 保存
	merge : 更新
	remove : 删除
	find/getRefrence : 根据id查询
	
iii.jpql查询
	sql:查询的是表和表中的字段
	jpql:查询的是实体类和类中的属性
	* jpql和sql语句的语法相似
	
	1.查询全部
	2.分页查询
	3.统计查询
	4.条件查询
	5.排序

3.find 和 getReference(延迟加载和立即加载)

使用find方法查询

​ 1.查询的对象就是当前客户对象本身

​ 2.在调用find方法的时候,就会发送sql语句查询数据库

使用getReference方法(懒加载)什么时候用什么时候才发送sql语句过去

​ 1.获取的对象是一个动态代理的对象

​ 2.调用getReference方法不会立即的发送sql语句去查询数据库

4.删除Remove

	@Test
    public void testRemove() {
   
        EntityManager entityManager = JpaUtil.getEntityManager();
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        // 必须先查询
        CstCustomer cstCustomer = entityManager.find(CstCustomer.class, 1L);
        // 调用remove 方法完成删除功能
        entityManager.remove(cstCustomer);
        tx.commit();
        entityManager.close();
    }

5.更新Merge

	@Test
    public void testMerge() {
   
        EntityManager entityManager = JpaUtil.getEntityManager();
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        // 必须先查询
        CstCustomer cstCustomer = entityManager.find(CstCustomer.class, 2L);
        // 调用merge 方法完成更新功能
        cstCustomer.setCustIndustry("it教育");
        entityManager.merge(cstCustomer);

        tx.commit();
        entityManager.close();
    }

6.JPA中的复杂查询

使用: JPQL全称Java Persistence Query Language

	// 查询全部
			// 创建query对象
			String jpql = "from Customer";
			Query query = em<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值