SpringData分析

学习ORM思想启发


04-orm思想的概述[00_00_02][20210225-092143].png
  • 1 建立实体类与表中的关系
  • 2 建立实体类中属性和表中字段关系

学习ORM思想


2.1 orm思想

主要目的:操作实体类就相当于操作数据库表
建立两个映射关系:
    实体类和表的映射关系
    实体类中属性和表中字段的映射关系
不再重点关注:sql语句
实现了ORM思想的框架:mybatis,hibernas'da'fte

hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,
    它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,
    自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

2.2 hibernate框架介绍

Hibernate是一个开放源代码的对象关系映射框架,
    它对JDBC进行了非常轻量级的对象封装,
    它将POJO与数据库表建立映射关系,是一个全自动的orm框架

2.3 JPA规范

jpa规范,实现jpa规范,内部是由接口和抽象类组成

附加 PA与hibernate的关系
JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现。

图片1.png

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

2.4 jpa的基本操作

2.2.1 创建客户表 (客户是一家公司)
     cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
     cust_name varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
     cust_source varchar(32) DEFAULT NULL COMMENT '客户信息来源',
     cust_industry varchar(32) DEFAULT NULL COMMENT '客户所属行业',
     cust_level varchar(32) DEFAULT NULL COMMENT '客户级别',
     cust_address varchar(128) DEFAULT NULL COMMENT '客户联系地址',
     cust_phone varchar(64) DEFAULT NULL COMMENT '客户联系电话',
     PRIMARY KEY (`cust_id`)
   ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;  

2.2.2 环境搭建过程

1 创建maven工程 导入坐标
2 需要配置jpa核心配置文件



   
   
       
       org.hibernate.jpa.HibernatePersistenceProvider

       
       
           
           
           
           
           

           
           
           
       
   

3 编写客户实体类
4 配置客户实体类和表,类中属性和表中字段映射关系
5 保存客户信息

1.加载配置文件创建实体管理器工厂
           Persisitence:静态方法(根据持久化单元名称创建实体管理器工厂)
               createEntityMnagerFactory(持久化单元名称)
           作用:创建实体管理器工厂
           
2.根据实体管理器工厂,创建实体管理器
           EntityManagerFactory :获取EntityManager对象
           方法:createEntityManager
           * 内部维护的很多的内容
               内部维护了数据库信息,
               维护了缓存信息
               维护了所有的实体管理器对象
               再创建EntityManagerFactory的过程中会根据配置创建数据库表
           * EntityManagerFactory的创建过程比较浪费资源
           特点:线程安全的对象
               多个线程访问同一个EntityManagerFactory不会有线程安全问题
           * 如何解决EntityManagerFactory的创建过程浪费资源(耗时)的问题?
           思路:创建一个公共的EntityManagerFactory的对象
           * 静态代码块的形式创建EntityManagerFactory

* 解决实体管理器工厂的浪费资源和耗时问题
* 通过静态代码块的形式,当程序第一次访问此工具类时,创建一个公共的实体管理器工厂对象
* 第一次访问getEntityManager方法:经过静态代码块创建一个factory对象,再调用方法创建一个EntityManager对象
* 第二次方法getEntityManager方法:直接通过一个已经创建好的factory对象,创建EntityManager对象

public class JpaUtils {

   private static EntityManagerFactory factory;

   static  {
       //1.加载配置文件,创建entityManagerFactory
       factory = Persistence.createEntityManagerFactory("myJpa");
   }

   /**
    * 获取EntityManager对象
    */
   public static EntityManager getEntityManager() {
      return factory.createEntityManager();
   }
}



           
3.创建事务对象,开启事务
           EntityManager对象:实体类管理器
               beginTransaction : 创建事务对象
               presist : 保存
               merge  : 更新
               remove : 删除
               find/getRefrence : 根据id查询
               
           Transaction 对象 : 事务
               begin:开启事务
               commit:提交事务
               rollback:回滚

你可能感兴趣的:(SpringData分析)