JPA之初体验

JPA全称为Java Persistence API,即Java持久化APIjava

JPA是Hibernate的一个抽象(就像JDBC和JDBC驱动的关系),从功能上来讲,JPA是Hibernate功能的一个子集。mysql

使用JPA持久化对象的步骤sql

1.建立persistence.xml,在这个文件中配置持久化单元数据库

>须要指定跟哪一个数据库进行交互框架

>须要指定JPA使用哪一个持久化的框架以及配置该框架的基本属性ide

2.建立实体类,使用annotation来描述实体跟数据库表之间的映射关系ui

3.使用JPA API完成数据增删改查操做this

>建立EntityManagerFactory(对应Hibernate中的SessionFactory)url

>建立EntityManager(对应Hibernate中的Session).net

 

1.在项目中加入Hibernate的required和jpa文件夹下的全部jar包,加入MySQL驱动包

2.新建JPA项目

3.配置persistence.xml,ppersistence.xml文件打成jar包后,必须保存在META-INF文件夹下

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
	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">
	<persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
		<!-- 配置使用什么ORM产品来做为JPA的实现 1.实际上配置的是javax.persistence.spi.PersistenceProvider接口的实现类 
			2.若JPA项目中只有一个JPA的实现产品,则也能够不配置该节点 -->
		<provider>org.hibernate.ejb.HibernatePersistence</provider>

		<!-- 添加持久化类 -->
		<class>com.f145a.jpa.helloworld.Customer</class>

		<properties>
			<!-- 链接数据库的基本信息 -->
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa" />
			<property name="javax.persistence.jdbc.user" value="root" />
			<property name="javax.persistence.jdbc.password" value="123456" />

			<!-- 配置JPA实现产品的基本属性-配置Hibernate的基本属性 -->
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
		</properties>
	</persistence-unit>

</persistence>

4.建立实体类Customer.java

@Entity:表示该类是一个可持久化实体类,标记了该注释的类能够由实体管理器EntityManager来管理

@Table:表示该实体类映射为数据库中的指定的一个表。使用name属性指定数据库的表名,若是表名与类名相同,那么能够省去name属性(以下例子便可省去name属性)

@Id:表示该属性为该实体的主键。一般置于属性声明语句以前,也可置于属性的getter方法前(以下例子)

@GeneratedValue:设置Id的生成规则。经过strategy属性指定,默认状况下,JPA自动选择一个最适合底层数据库的主键生成策略:SQLServer对应identity,MySQL对应autoincrement

在javax.presistence.GenerationType中定义了如下几种可供选择的策略:

-IDENTITY:采用数据库ID自增加的方式来自增主键字段,Oracle不支持这种方式

-AUTO:JPA自动选择合适的策略,是默认选项

-SEQUENCE:经过序列产生主键,经过@SequenceGenerator注解指定序列名,MySQl不支持这种方式

-TABLE:经过表产生主键,框架借由表模拟序列产生主键,使用该策略可使应用易于数据库移植

@Column:表示实体类的属性对应表中的指定字段。用name属性指定数据表的列名,如实体的属性与其映射的数据表的列名相同便可省略

@Basic:表示一个简单的属性到数据库表的字段映射,对于没有任何标注的getxx()方法,默认即为@Basic

package com.f145a.jpa.helloworld;

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

@Table(name="customer")
@Entity
public class Customer {

	private Integer id;
	private String lastName;
	private String email;
	private int 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 int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

5.实现mian方法Main.java

package com.f145a.jpa.helloworld;

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

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.setAge(34);
		customer.setEmail("tom@qq.com");
		customer.setLastName("Tom");
		
		entityManager.persist(customer);
		//5.提交事务
		transaction.commit();
		//6.关闭EntityManager
		entityManager.close();
		//7.关闭EntityManagerFactory
		entityManagerFactory.close();
	
	}
}

6.运行Main类,能够看到数据库中新建了一个customer表,并插入了一条数据

欢迎访问个人我的博客 http://www.chengzequn.top

相关文章
相关标签/搜索