hibernate之JPA入门篇

所谓JPA就是Java  persistence api----java持久化标准。

由来:大家都知道hibernate是持久层框架都先驱,出世备受瞩目,一个东西出名就就会有无数的追随者,于是市面上出现了很多持久层框架,但各自的方法名称都不同,你的更新方法叫update,我就叫change!这样到最后搞得很乱,给开发者带来很多问题。于是sun公司(当然现在是oracle了)就让hibernate带头搞一套Java持久化框架的标准,以后只要再是持久化框架,大家都来支持这个标准,那么开发者用起来就顺畅多了,这就是JPA.

hibernate为了不修改自己原来辛辛苦苦打造的框架,所以不修改之前的的各种方法,所以我们用hibernate做持久化的时候依然可以用它自己独有的那一套完全没问题,不过它也支持了JPA,所以今天来看看如何在hibernate基础上使用JPA.


第一步:导包

hibernate自带JPA的jar包,因为版本不一样可能路径会有差异,我的在hibernate-release-5.3.1.Final/lib/jpa-metamodel-generator这个目录下,导入以后记得build path.

第二步:写我们JPA的主配置文件----persistence.xml

在src下建META-INF文件夹,然后在这个文件夹下新建persistence.xml文件。这里注意文件夹路径名字及xml文件路径名字都是固定的,不能自由发挥,因为JPA在获取EntityManagerFactory的时候可没有给你提供对应方法让你传配置文件的路径!

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
	http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
	version="2.0"> 
	
<persistence-unit name="jpaUnit" transaction-type="RESOURCE_LOCAL">//这里name随意起,但万一有多个时不能重复,事务类型固定写法
	<properties>
		<property name="" value=""/>
		<property name="" value="org.hibernate.dialect.MySQLMyISAMDialect"/>
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/testDB"/>
			<property name="hibernate.connection.username" value="username"/>
			<property name="hibernate.connection.password" value="password"/>
			<!-- 第二部分,hibernate可选配置 -->
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
			<property name="hibernate.hbm2ddl.auto" value="update"/>
			<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
			<property name="hibernate.current_session_context_class" value="thread"/>
	</properties>
	</persistence-unit>
</persistence>

写这个配置文件时开始老不提示,去xml catagory里关联了也都还是不提示,原因就是最上面引入schema申明出错了,粘贴时小心点。。。

顺带说一下需要关联的那个xsd文件位置吧(因hibernate版本会有差异):

hibernate-release-5.3.1.Final/project/hibernate-core/src/main/resources/org/hibernate/jpa


第三步:创建一个实体类,并用注解的方式生成表,如下

package com.dimples.dao;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity    //标明这仅仅就是个实体类,其他啥都不干
@Table(name="customer")    //指定生成对应表的名称
public class Customer implements Serializable {
	
	@Id    //标明这个字段时主键
	@Column(name="id")    //指明这个属性对应的字段名
	@GeneratedValue(strategy=GenerationType.IDENTITY)    //主键生成策略
	private Integer id;
	
	@Column(name="name")
	private String name;
	
	@Column(name="address")
	private String address;
	
	@Column(name="level")
	private String level;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getLevel() {
		return level;
	}
	public void setLevel(String level) {
		this.level = level;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", address=" + address + ", level=" + level + "]";
	}
	
	
}

这是一个获取 EntityManager的工具类:

public class MyJPAUtils {
	private static EntityManagerFactory factory;
	static {
        //通过单元名称直接生成对应工厂,不需要指定主配置文件的路径,相当于hibernate中的SessionFactory
factory = Persistence.createEntityManagerFactory("jpaUnit");}public static EntityManager getEntityManager() {return factory.createEntityManager();//相当于hibernate中的session}}

最后写个测试类跑一下:

public static void main(String[] args) {
		EntityManager entityManager = MyJPAUtils.getEntityManager();
	}

结果:

Hibernate: 
    
    create table customer (
       id integer not null auto_increment,
        address varchar(255),
        level varchar(255),
        name varchar(255),
        primary key (id)
    ) engine=InnoDB
表生成成功!!!

猜你喜欢

转载自blog.csdn.net/dimples_qian/article/details/80890082