JavaWeb 笔记之 JPA 以及开发步骤

JPA

1. JPA 是什么

Java Persistence API:用于对象持久化的 API

Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层

2. JPA 和 Hibernate 的关系

JPA 是 hibernate 的一个抽象(就像 JDBC 和 JDBC 驱动的关系):

  • JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架 —— 因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现
  • Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现 从功能上来说,JPA 是 Hibernate 功能的一个子集

3. JPA 的优势

  • 标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
  • 简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注释;JPA 的框架和接口也都非常简单,
  • 可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
  • 支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型

4. JPA 项目的开发步骤

(1). 导入 JPA 依赖的 jar 文件

  • hibernate-release-x.x.x.Final\lib\required*.jar
  • hibernate-release-x.x.x.Final\lib\jpa*.jar
  • 数据库驱动的 jar 包

(2). 配置持久化类

Table(name="JPA_CUTOMERS")
@Entity
public class Customer {
	
	private Integer id;
	private String lastname;
	private String email;
	private int age;
	
	private Date createTime;
	private Date birth;

	@GeneratedValue(strategy=GenerationType.AUTO)
	@Id
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name="last_name",length=50,nullable=false)
	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;
	}
	public Date getCreateTime() {
		return createTime;
	}
	@Temporal(TemporalType.TIMESTAMP)
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	@Temporal(TemporalType.DATE)
	public Date getBirth() {
		return birth;
	}
	public void setBirth(Date birth) {
		this.birth = birth;
	}
}

(3). 类路径下的的 META-INF 目录下放置persistence.xml,文件的名称是固定的

    <!-- name 属性用于定义持久化单元的名称  transaction-type 指定 JPA 的事务处理策略 (RESOURCE_LOCAL:默认值,数据库级别 的事务,只能针对一种数据库) -->
	<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.axon.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=""/>
			
			<!-- 配置hibernate的基本信息 -->
			<!-- 执行操作时是否在控制台打印 SQL -->
			<property name="hibernate.show_sql" value="true" />
			<!-- 是否对 SQL 进行格式化 -->
			<property name="hibernate.format_sql" value="true" />
			<!-- 指定自动生成数据表的策略 -->
			<property name="hibernate.hbm2ddl.auto" value="update" />
			
		</properties>
		
	</persistence-unit>

(4). 持久化单元操作

        // 创建 EntityManagerFactory 对象
		EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa-1");
		// 创建  EntityManager 对象
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		// 开启事务
		EntityTransaction entitytransaction = entityManager.getTransaction();
		entitytransaction.begin();
		//持久化操作
		entityManager.persist(customer);
		//提交事务
		entitytransaction.commit();
		// 关闭 EntityManager
		entityManager.close();
		//关闭 EntityManagerFactory
		entityManagerFactory.close();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值