zoukankan      html  css  js  c++  java
  • JPA ---- 简介

    一、JPA(Java Persistence API)是SUN官方推出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。JPA是在充分吸收了现有Hibernate,TopLink,JDO 等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。
     
    二、JPA包括以下三方面的技术
     1、ORM映射元数据
        JPA支持XML和JDK5.0注释两种元数据形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
     2、Java持久化API
        用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者可以从繁琐的JDBC和SQL代码中解脱出来。
     3、查询语言(JPQL)
        这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
     
    三、实例:
      1、创建JPA Project,导入jar包:
        (1)Hibernate必须的jar包
        (2)hibernate-entitymanager-4.2.2.Final.jar
        (3)mysql驱动jar包
     
      2、编写持久化类:
            @Table(name="jpa_customer")
            @Entity
            public class Customer {
               private Integer id;
               private String lastName;
               private String email;
               private Integer age;
         
               @GeneratedValue(strategy=GenerationType.AUTO)
               @Id
               public Integer getId() {
                  return id;
               }
               public void setId(Integer id) {
                  this.id = id;
               }
         
               @Column(name="last_name")
               public String getLastName() {
                  return lastName;
               }
               public void setLastName(String lastName) {
                  this.lastName = lastName;
               }
               public String getEmail() {
                  return email;
               }
               public void setEmail(String email) {
                  this.email = email;
               }
               public Integer getAge() {
                  return age;
               }
               public void setAge(Integer age) {
                  this.age = age;
               }
            }
        3、配置核心配置文件(persistence.xml)
        <!-- 配置使用什么ORM产品,作为JPA的实现
                 1.实际上配置的是javax.persistence.spi.PersistenceProvider接口的实现类
                 2.若JPA项目中只有一个JPA的实现产品,也可以不配置给节点
              -->
              <provider> org.hibernate.ejb.HibernatePersistence</provider>
              <!-- 配置实体类 -->
              <class>com.beans.Customer</class>
              
              <properties>
                  <!-- 配置数据库连接的基本信息 -->
                  <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
                  <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
                  <property name="javax.persistence.jdbc.user" value="root"/>
                  <property name="javax.persistence.jdbc.password" value="admin"/>
                  
                  <!-- 配置JPA实现产品的基本信息, 配置hibernate的基本属性-->
                  <property name="hibernate.show_sql" value="true"/>
                  <property name="hibernate.format_sql" value="true"/>
                  <property name="hibernate.hbm2ddl.auto" value="update"/>
              </properties>
      
       4、测试:
      public class Main {
           public static void main(String[] args) {
              //1.创建EntityManagerFactory
              String persistenceUnitName = "jpa-1";
              EntityManagerFactory entityManagerFactory =
                         Persistence.createEntityManagerFactory(persistenceUnitName);
              
              //2.创建EntityManager
              EntityManager entityManager = entityManagerFactory.createEntityManager();
              
              //3.开启事务
              EntityTransaction transaction = entityManager.getTransaction();
              transaction.begin();
              
              //4.进行持久化操作
              Customer customer = new Customer();
              customer.setLastName("张三");
              customer.setEmail("abc@qq.com");
              customer.setAge(23);
              entityManager.persist(customer);
              //5.提交事务
              transaction.commit();
              
              //6.关闭EntityManager
              entityManager.close();
              
              //7.关闭EntityManagerFactory
              entityManagerFactory.close();
         }
    }
  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/10940809.html
Copyright © 2011-2022 走看看