一、JPA API

  • Persistence 类:用于获取 EntityManagerFactory 实例,该类含有静态方法 createEntityManagerFactory
  1. //persistence.xml 中的 persistence-unit
  2. String persistenceUnitName = "jpa-1";
  3. EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);

还可以使用 map 来配置 hibernate。

  1. Map map = new HashMap<String, Object>();
  2. map.put("hibernate.show_sql", false);
  3. EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName, map);
  • EntityManagerFactory 接口:创建 EntityManager 实例,该接口有以下几个方法:

    • createEntityManager():用于创建实体管理对象实例。
    • isOpen():检查 EntityManagerFactory 是否处于打开的状态。默认创建后就一直是打开的,除非调用close() 方法将其关闭。
    • close():关闭 EntityManagerFactory, EntityManagerFactory 关闭后将释放所有资源,其他方法将不能调用,否则将导致 IllegalStateException 异常。
  • EntityManager 类:该类是完成持久化操作的核心对象,实体作为普通的 Java 对象,只有在调用 EntityManager 将其持久化后才会变成持久化对象。它有以下几个方法:

    • find(Class entityClass,Object primaryKey):返回指定的 OID 对应的实体类对象。

      1. //若 OID 不存在于数据库中,则会返回一个 null
      2. Customer c = entityManager.find(Customer.class, 2);
    • getReference (Class entityClass,Object primaryKey):与 find 方法类似,但是采用懒加载的方式,并且如果数据库中不存在此 OID,会抛出 EntityNotFoundException。

      1. //若 OID 不存在于数据库中,则会抛出 EntityNotFoundException 异常
      2. Customer c = entityManager.getReference(Customer.class, 2);
      3. // 由于懒加载,此行结果会先于 SQL 语句显示出来
      4. System.out.println("-------");
      5. System.out.println(c.getLastName());
    • persist(Object entity):用于将新创建的 Entity 从新建状态转为持久化状态即插入数据,也能更新数据。

      1. Customer customer = new Customer();
      2. customer.setAge(15);
      3. customer.setLastName("Tom");
      4. customer.setEmail("Tom@163.com");
      5. entityManager.persist(customer);
      1. Customer customer = entityManager.find(Customer.class, 1);
      2. customer.setLastName("Tom");
      3. entityManager.persist(customer);
    • remove(Object entity):将实体的状态从持久化状态变为删除状态,并从数据库中删除相应的记录。

      1. //实体不能是游离态的,否则会抛出异常,例如以下就是不行的
      2. // Customer c = new Customer();
      3. // c.setId(2);
      4. // entityManager.remove(c);
      5. Customer customer = entityManager.find(Customer.class, 2);
      6. entityManager.remove(customer);
    • merge(T entity):用于处理 Entity 的同步。即数据库的插入和更新操作。

    此外 EntityManager 还有一些其他的方法,实际用到了再查阅吧。

  • EntityTransaction:事务管理类,有以下一些方法:

    • begin():启动一个事务
    • commit():提交一个事务
    • rollback():回滚一个事务。
    • isActive():查看当前事务是否是活动的,若为 true,则不能调用 begin()开启事务。

扩:实体的状态

  • 新建状态:新创建的对象,尚未拥有持久化主键。
  • 持久化状态:有持久化主键并和持久化建立了上下文环境。
  • 游离状态:有持久化主键,但是没有和持久化建立上下文环境。
  • 删除状态:拥有持久化的主键并和持久化建立了上下文环境,但是已从数据库中删除。

注:在这里,建立上下文环境就是与 EntityManager 关联。

二、JPA 注解

下面就来介绍些 JPA 中常见的注解。

  • @Entity 注解:用于实体类声明语句之前,指出该 Java 类为实体类,并映射到指定的数据库表中。

    1. @Entity(name = "customers") // 将 Customer 类 映射到 cutomers 表中
    2. public class Customer {
  • @Basic 注解:表示实体类中的属性到数据表中字段的映射,对于没有任何标注的 getXxx()方法,默认就是@Basic。

    1. // 默认情况下,就是@Basic 注解,email 属性映射成表中的 email字段
    2. public String getEmail() {
    3. return email;
    4. }
  • @Column 注解:指定属性映射成表中的特定名字字段,即属性和表中字段不同名。

    1. //将lastName 映射成表中的 last_name 字段
    2. @Column(name = "last_name")
    3. public String getLastName() {
    4. return lastName;
    5. }
  • @Id 注解:用于将此属性映射成数据表中的主键列。该注解往往也和 @GeneratedValue 注解一起使用,用于标注生成主键的策略。

    1. // 表示 id 属性映射成数据表中的主键列,并使用自动递增的生成策略
    2. @Id
    3. @GeneratedValue(strategy = GenerationType.IDENTITY)
    4. public Integer getId() {
    5. return id;
    6. }
  • @Transient 注解:表示该属性不映射数据表中的字段。若某个属性不是数据表中的字段,则必须加上此注解,因为 ORM 框架默认属性的注解为 @Basic。

  • @Temporal 注解:在核心的 Java API 中日期、时间的类型都是 Date,而在数据库中却有DATE,TIME TIMESTAMP 或者混用,所以若要精确日期或时间,就需要使用此注解。

    1. //映射到数据库中的birth字段形如 2018-06-02,不加该注解,表中字段形如2018-06-02 12:22:12
    2. @Temporal(TemporalType.DATE)
    3. public Date getBirth() {
    4. return birth;
    5. }

JPA API与注解的更多相关文章

  1. JPA学习(2)注解

    上一篇学习了JPA的helloworld,也初略的使用了一些注解,接下来就细细的了解一下有哪些注解,和这些注解的作用 JPA的基本注解: ①@Entity,@Table,@Id,@GeneratedV ...

  2. 利用Eclipse的JPA自动生成注解实体

    新公司用的SSH(springmvc)框架,看代码的时候,发现没有hbm.xml文件,全部使用的注解形式.在一次闲聊的时候问同事,这么多entity  写起来不麻烦么.同事说根据数据库自动生成的.于是 ...

  3. 使用JPA中@Query 注解实现update 操作

    spring使用jpa进行update操作主要有两种方式: 1.调用保存实体的方法 1)保存一个实体:repository.save(T entity) 2)保存多个实体:repository.sav ...

  4. JPA之@GeneratedValue注解(转)

    JPA的@GeneratedValue注解,在JPA中,@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键), ...

  5. 二十、springboot之jpa开发@MappedSuperclass 注解说明

    @MappedSuperclass使用条件: 当我们进行开发项目时,我们经常会用到实体映射到数据库表的操作,此时我们经常会发现在我们需要映射的几个实体类中,有几个共同的属性,例如编号ID,创建者,创建 ...

  6. JPA之@GeneratedValue注解

    JPA的@GeneratedValue注解,在JPA中,@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键), ...

  7. jpa和hibernate注解

    http://www.objectdb.com/api/java/jpa/JoinColumns 用hibernate和jpa annotation 大概一年多了,今天闲来无事,对他们关联关系元数据写 ...

  8. JPA的Column注解总结

    就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类中属性与数据表中字段的对应关系. 该注解的定义如下: @Target({METHOD, FIELD}) @Ret ...

  9. JPA实体类注解、springboot测试类、lombok的使用

    前提准备: 搭建一个springboot项目,详情请参见其它博客:点击前往 1 引入相关依赖 web.mysql.jpa.lombok <?xml version="1.0" ...

随机推荐

  1. Android实现多个倒计时优化与源代码分析

    由于之前有个项目需求是须要时时刻去更新UI倒计时,之前想到的,这简单嘛,用计时或者Handler就能够搞定,并且性能也不错,可是需求要ListView,什么,?大量的View都须要,那Handle处理 ...

  2. mssql 中的二进制返回数据

  3. 蓝桥 ADV-233 算法提高 队列操作 【STL】

      算法提高 队列操作   时间限制:1.0s   内存限制:256.0MB      问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. ...

  4. 【CSU 1803】2016

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 Solution: 考虑两个数x,y乘积%2016=0 x×y≡0(MOD 2016) x= ...

  5. Keepalived+lvs 搭建高可用负载均衡

    本站点停止更新,请访问:blog.coocap.com 不了解负载均衡高可用的童鞋,强烈建议先看keepalived+nginx高可用负载均衡: 传送门(求粉):http://www.cnblogs. ...

  6. python-----使用requirements.txt批量安装包

    首先写一个 requirements.txt,格式如图: 然后使用命令行,到 requirements.txt 所在的目录下,执行命令: pip install -r requirements.txt ...

  7. luogu3941入阵曲

    https://www.zybuluo.com/ysner/note/1301562 题面 统计在给出的\(n*m\)矩阵中,有多少个不同的子矩形中的数字之和是\(k\)的倍数? 解析 切不掉这道题是 ...

  8. 杂项:game_navigation

    ylbtech-杂项:game_navigation 1.返回顶部 1. 2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处: ...

  9. Spark GraphX 聚合操作

    package Spark_GraphX import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.graph ...

  10. cURL模拟HTTP请求(支持HTTPS)

    function setHttpRequest($url,$headers,$params=array(),$method="GET") { $ci = curl_init(); ...