Hibernate的完全支持JPA规范

Hibernate的完全支持JPA规范

  • 操作的API和映射的注解全部使用JPA的标准。

配置流程图

配置流程图

  1. 需要一个总配置文件存储框架需要的信息。(注意:配置文件必须要放在classpath:/META-INF/prersistence.xml)
  2. 需要通过Persistence类来获得配置文件的信息,构造EntityManagerFactory(实体管理工厂)
  3. 通过实体管理工厂的对象获得操作类对象,实体管理类对象。
  4. 操作类操作数据库表之前,必须要配置一个和数据表关联的实体类(有关联注解的),不要忘了在总配置文件加载实体类

步骤

  1. 导入Hibernate的支撑包(包括数据库的驱动包)
  2. 导入JPA的标准规则包,在hibernate-release-5.0.7.Final\lib\jpa目录下的 hibernate-entitymanager-5.0.7.Final.jar
  3. 通过schema的persistence_2_1.xsd约束创建一个总配置文件,

    • 注意:文件必须放在classpath:/META-INF/persistence.xml
    • Eclipse已经支持了JPA框架,所有不需要配置xsd文件,直接使用–

配置文件

在总配置加上加载映射实体类的配置。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd ">
    <!-- 持久单元,作用:配置一个数据库的连接 -->
    <persistence-unit name="mysql-crm">

        <!-- 配置映射的实体类 -->
        <!-- 基于hibernate框架的JPA已经实现了自动载入映射实体类 ,所以不配置也是可以的。
        建议还是加上配置。如果不写容易忽略加载的实体类有哪些
        -->
        <class>com.pojo.Customer</class>

        <!-- 四要素 -->
        <properties>
            <!-- 如果使用Hibernate实现的JPA,使用的就是原来Hibernate的环境参数 -->
            <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/crm" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.connection.password" value="123456" />
            <property name="hibernate.show_sql" value="true" />
            <!-- 格式化输出SQL -->
            <property name="hibernate.format_sql" value="true" />
        </properties>

    </persistence-unit>
</persistence>

创建一个帮助类JPAUtils,获得操作对象

package com.utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 * 获得操作类的帮助类
 * @author ranger
 *
 */
public class JPAUtils {

    //2.获得唯一的实体管理工厂
    public static EntityManagerFactory managerFactory=JPAUtils.createEntityManagerFactory();


    //1.获得实体管理工厂
    private static EntityManagerFactory createEntityManagerFactory(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("mysql-jpa");
        return emf;
    }

    //2.获得实体管理类对象
    public static EntityManager getEntityManger(){
        EntityManager entityManager = managerFactory.createEntityManager();
        return entityManager;
    }

    public static void main(String[] args) {
        System.out.println(JPAUtils.getEntityManger());
    }
}

实体类的配置

//1.类和表的关系
@Entity
@Table(name="cst_customer")
public class Customer {

     //2.属性和字段的关系

    //注意:ID列必须加上@ID
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    //注意,如果属性名和字段同名,可以不配置@Column
    @Column(name="cust_id")  
    private Long custId;// '客户编号(主键)',
    @Column(name="cust_name")
    private String custName;// '客户名称(公司名称)',
    @Column(name="cust_source")
    private String custSource;//  '客户信息来源',
    @Column(name="cust_industry")
    private String custIndustry;//  '客户所属行业',
    @Column(name="cust_level")
    private String custLevel;//  '客户级别',

    //配置在属性上面的注解可以配置get方法的上面(,建议放在属性上面,因为放在get上面太乱了)
    get()/set()......
}

测试

//1.保存数据
@Test
public void persist(){
    //1.获得操作对象
    EntityManager entityManager = JPAUtils.getEntityManger();
    //2.打开事务
    EntityTransaction transaction = entityManager.getTransaction();
    //3.启动事务处理
    transaction.begin();

    Customer c=new Customer();
    c.setCustName("腾讯");
    //4.插入操作
    entityManager.persist(c);
    //5.提交事务
    transaction.commit();
    //6.关闭
    entityManager.close();
}

猜你喜欢

转载自blog.csdn.net/kato_op/article/details/80304697
今日推荐