JPA 学习(一)以及简单的helloworld 的应用

版权声明:如果觉得好的话,不防点个赞,那点你们认为不对或是需要补充,可以留言啊!本人原创,未经允许不得转载!! https://blog.csdn.net/qq_28289405/article/details/82456067

目录

JPA 概述

JPA与hibernate的关系

JPA的优势

JPA包括3方面的技术

简单的HelloWorld

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

操作:用eclipse创建jpa


JPA 概述

一、什么是JDBC

通过数据库提供的API 去访问数据库,导致了连接数据库的方法都不一样。于是JDBC 提供了一种规范,但是JDBC里面并没有提供这种接口的实现类,然后各个数据库的厂商提供这种数据库的实现类,就有了JDBC的驱动jar包。所以,JDBC 实际上就是一组规范,接口,他统一了java程序访问数据库的标准。

二、JPA是什么

JPA统一了java应用程序使用各种ORM框架的方式。

JPA与hibernate的关系

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

        ①、JPA是规范:JPA本质上就是一种ORM规范,不是ORM框架——因为JPA并未提供ORM实现,它只是制定了一些规范,提供了一些编程的API接口,但具体实现则由ORM厂商提供实现

        ②、hibernate是实现:hibernate除了作为ORM框架之外,他也是一种JPA实现。

从功能上来说,JPA是hibernate功能的一个子集。

JPA的优势

①、标准化:提供相同的API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

②、简单易用,集成方便:JPA的主要目标之一就是提供更加简单的编程模型,在Jpa 框架下创建实体和创建java类一样简单,只需要使用@Entity进行注释;JPA的框架和接口也都非常简单。

③、可媲美JDBC的查询能力:JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING等通常只有SQL才能够提供的高级查询特性,甚至还能够支持子查询。

④、支持面向对象的高级特性:JPA中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。

JPA包括3方面的技术

①、ORM 映射元数据:JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

②、JPA的API :用操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

③、查询语言(JPQL):这是持久换操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的SQL紧密耦合。

简单的HelloWorld

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

1、创建 persistence.xml, 在这个文件中配置持久化单元   【persistence.xml是JPA最基本的配置文件】

      ①、需要指定跟哪个数据库进行交互;

      ②、需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性

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

3、使用 JPA API 完成数据增加、删除、修改和查询操作

       ①、创建 EntityManagerFactory (对应 Hibernate 中的 SessionFactory);

       ②、创建 EntityManager (对应 Hibernate 中的Session);

操作:用eclipse创建jpa

直接finish就可以了

1、导入jar包

2、persistence.xml   :JPA 规范要求在类路径的 META-INF 目录下放置persistence.xml,文件的名称是固定的

<?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">
		<properties>
		   <!-- 
			配置使用什么 ORM 产品来作为 JPA 的实现 
			1. 实际上配置的是  javax.persistence.spi.PersistenceProvider 接口的实现类
			2. 若 JPA 项目中只有一个 JPA 的实现产品, 则也可以不配置该节点. 
			-->
		    <provider>org.hibernate.ejb.HibernatePersistence</provider>
		   
		   <!-- 添加持久化类 -->
		   <class>com.flx.helloworld.Customer</class>
		   
		    <!-- 连接数据库的基本信息 -->
			<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="1230"/>
		
	        <!-- 配置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>

3、实体类

4、Main

package com.flx.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(12);
		customer.setEmail("[email protected]");
		customer.setLastName("Tom");
		
		entityManager.persist(customer);
		
		//5.提交事务
		transaction.commit();
		
		//6.关闭EntityManager
		entityManager.close();
		
		//7.关闭EntityManagerFactory
		entityManagerFactory.close();
	}

}

运行的结果:

(之前只是建了一个空的数据库)数据库:

猜你喜欢

转载自blog.csdn.net/qq_28289405/article/details/82456067