• Jpa入門


    本文主体

    • 1. 介绍什么是JPA,ORM,JPA优缺点/;
    • 2.  JPA CRUD;(重点掌握)
    • 3.  JPA的核心API认识(理解)
    • 4.  配置自动生成表;(掌握)
    • 5.  单表映射细节(掌握)

    1. 介绍什么是JPA,ORM,JPA优缺点/;

    (1)JPA Java Persistence([pəˈsɪstəns] 持久) API

      Java EE 5.0 平台标准的 对象关系映射(ORM) 规范(规范就是为第三方定义标准)

      对象关系映射(ORM) 规范:entity类对应一张表,一个对象一行,一个属性对应表字段

    (2)ORM 对象关系映射(Object Relational Mapping,简称ORM)

    是通过使用描述对象(Entity)和数据库之间映射,将面向对象语言程序中的对象自动持久化到关系数据库中。

    (3) HibernateJPA的关系

      Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级(相对于EJB这一套)的对象封装,它将POJO(就是咱们的domain)与数据库表建立映射关系,Hibernate可以自动生成SQL语句.

    简单一句话:JPA是持久化规范,而Hibernate是其实现。

    (3)JPA优缺点对照jdbc

    jdbc:

    本质:处理Java对象和关系型数据库表之间的转换

    优点:操作数据库最底层,性能最高(前提是你要有相应的经验,并且是一个数据库高手)

    缺点:

    1. 使用复杂(重复代码太多)
    2. 移植数据库很麻烦,改动比较多
    3. 性能优化得自己处理,没有提供数据的缓存,需要自己实现
    4. 面向sql语句操作,不是面向对象的

     JPA:

    本质:处理Java对象和关系型数据库表之间的转换,只是对JDBC再次做了一层封装

    优点:

    1. 程序员操作很简单,代码简单 entityManager.persist(employee);
    2. 直接面向持久对象操作
    3. 提供世界级数据缓存(现在几乎所有的ORM框架的缓存都是学的Hibernate)

      一级缓存,二级缓存,查询缓存(空间换速度)

       4.数据库移植性很强,很少的修改(通过配置方言搞定)把各种数据库抽取了一个方言接口

    缺点:

    1.不能干预sql语句的生成

    2.不适合做高要求sql语句

    3.高数量不适合sql语句

    2.  JPA CRUD;(重点掌握)

       a)增加

    创建一个EMTITY实体类,

    核心配置文件在wnb-mata下persistence.xml

     

     b)抽取工具类

     c)更改何删除

     d)查询

    3自动生成表

    update没有表生成表以后 直接更改不在每次操作都生成

    create每一次给你创建一个表

    4核心APA

    (1) EntityManagerFactory

      EntityManagerFactory中应保存了对应的persistence unit中的数据库配置信息和所有实体及关系以及预定义的JPQL语句。同时,EntityManagerFactory还负  责维护二级缓存线程安全

      应用中针对一个持久化单元可以共享一个EntityManagerFactory实例。

       注意一个应用程序对应一个EntityManagerFactory:一个数据库

    1.)数据库配置信息它里面有一个连接池(本身就重,创建与销毁太费时间)

    2.)二级缓存(查询缓存,...)

    3.)预定义的JPQL语句(JPQL,SQL)

    4.)所有实体及关系

    重量级对象 -> 它的创建与销毁是非常非常非常的费时费性能的

    由于它如此,以后我们项目在使用过程中是不关闭的(只有项目关闭的时候才关它)

    一个对象如果不能随时创建销毁,我们又要使用它,那么它就只有一个 -> 如果不设计成线程安全对象,就要出问题

    (2) EntityManager(重点,掌握)

    使用最广泛,类似于HibernateSession对象。

    它提供和持久化相关的操作。增、删、改、查等。不是线程安全的,

    因此,一个EntityManager对象只可以由一个线程使用。

       创建与销毁不怎么费性能(可以随时创建与销毁)

    一个EntityManager对象只可以由一个线程使用(后面非常有用)

    一个请求,一个响应

           它里面还装了一个一级缓存

    (3)EntityTransaction

     

    处理不同数据库不同表的事务管理

    5单表映射

    @Entity
    public class Employee {
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      private Long id;//主键,自动生成
      @Column(length = 20, nullable = false, unique = true)
      private String name;//varchar(20);不允许覆盖 唯一
      private String password;
    // default="25"还必须同时配置一个属性insertable ="false",表示不出现在insert语句
      @Column(insertable = false, columnDefinition = "int(11) default '25'")
      private Integer age = 25;
      private Boolean sex;// 数据库没有布尔类型,bit对象
      @Column(columnDefinition = "decimal(19,2) ")
      private BigDecimal salary;// 19,2长度19保留两位小数
      // update=false:一经保存就不能修改属性:身份证号码,创建时间
      // 如果填错了,客户不能改,上传身份证照片,找客服,客服验证:程序员留后台hql:
      // update Employee set idcart=? where id=?
      // 创建时间:年月日时分秒
      @Column(updatable = false)
      @Temporal(TemporalType.TIMESTAMP)
      private Date createTime;
      // 生日:年月日
    @Temporal(TemporalType.DATE)
      private Date birthday;
      // 开会时间:时分秒
    @Temporal(TemporalType.TIME)
      private Date time;
      // 大文本
     @Lob
      private String text;
      // 如果name属性希望不持久化数据库
      // @Transient// 临时属性
      private String temp;

     

  • 相关阅读:
    QT设置窗口屏幕居中
    屏蔽ubuntu桌面鼠标右键以及Ctrl Alt F*
    ubuntu12.04 U盘自动挂载配置
    最受欢迎的15个Python开源框架
    异步非阻塞IO的Python Web框架--Tornado
    RabbitMQ RPC问题
    petapoco模板修改
    事件&表达式
    .net core2 单元测试
    检查邮箱IP是否在国际反垃圾邮件组织的黑名单中
  • 原文地址:https://www.cnblogs.com/13438145925xiaozheng/p/11234979.html
Copyright © 2020-2023  润新知