Hibernate的完全支持JPA规范
- 操作的API和映射的注解全部使用JPA的标准。
配置流程图
- 需要一个总配置文件存储框架需要的信息。(注意:配置文件必须要放在
classpath:/META-INF/prersistence.xml)
- 需要通过Persistence类来获得配置文件的信息,构造EntityManagerFactory(实体管理工厂)
- 通过实体管理工厂的对象获得操作类对象,实体管理类对象。
- 操作类操作数据库表之前,必须要配置一个和数据表关联的实体类(有关联注解的),不要忘了在总配置文件加载实体类
步骤
- 导入Hibernate的支撑包(包括数据库的驱动包)
- 导入JPA的标准规则包,在
hibernate-release-5.0.7.Final\lib\jpa
目录下的 hibernate-entitymanager-5.0.7.Final.jar 通过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();
}