jpa native 映射对象_JPA(Java Persistence API)

一、概述

JPA (Java Persistence API) Java持久化API。是一套Java官方制定的ORM 方案。

什么是ORM?

ORM(Object Relational Mapping)对象关系映射,在操作数据库之前,先把数据表与实体类关联起来。然后通过实体类的对象操作(增删改查)数据库表;所以说,ORM是一种实现使用对象操作数据库的设计思想。

市场主流的JPA框架:

Hibernate (JBoos)

EclipseTop(Eclipse社区)

OpenJPA (Apache基金会)

Hibernate是众多实现者之中,性能最好的

二、入门示例

任何框架的学习都应该从其配置流程开始学习

【1】、JPA配置流程图

0f85f4d91f5473019f152507d7a9180f.png

1. 我们需要一个总配置文件persistence.xml存储框架需要的信息 (注意,文件名不要写错,而且必须放在classpath/META-INF文件夹里面)

2. 我们需要一个Persistence持久类对象来读取总配置文件,创建实体管理工厂对象

3. 我们需要实体管理工厂获得数据库的操作对象实体管理对象EntityManager。

4. 我们通过EntityManager操作数据库之前,必须要先配置表与实体类的映射关系,从而实现使用对象操作数据库

【2】配置步骤说明

第一步:导入包 (不管什么框架,首先要做的事情)

第二步:创建一个总配置文件

第三步:创建一个JPAUtils获得操作对象EntityManager

第四步:创建一个实体类,并且配置好映射注解

第五步:在总配置文件加载实体类

第六步:测试代码(需求:插入数据到用户表)

1、创建Maven项目(导入Hibernate的JPA规范包)

POM.xml配置内容

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.zj</groupId>
  <artifactId>jpa-demo01-start</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
    <!-- hibernate框架 实现 JPA 依赖 -->
	<dependency>
	    <groupId>org.hibernate</groupId>
	    <artifactId>hibernate-entitymanager</artifactId>
	    <version>4.3.6.Final</version>
	</dependency>
    <!--jdbc驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.40</version>
	</dependency>
  </dependencies>
</project>

2、创建一个总配置文件

注:文件必须放在classpath:/META-INF/persistence.xml

61e2e094d923fa5ec699519d1b5210e6.png

说明:Eclipse已经支持了JPA框架,所有不需要配置xsd文件,直接使用

具体配置信息如下:

<?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="mysql-jpa">
  		<!-- 四要素 org.hibernate.cfg.Environment--> 
		<properties> 
    	<!-- 如果使用Hibernate实现的JPA,使用的就是Hibernate的环境参数 --> 
		<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" /> 
		<property name="hibernate.connection.username" value="root" /> 
		<property name="hibernate.connection.password" value="root" /> 
<!--可选配置--> 
<!--控制台打印sql语句--> 
		<property name="hibernate.show_sql" value="true" /> 
	    <!-- 格式化输出SQL --> 
		<property name="hibernate.format_sql" value="true" /> 
	</properties> 
  </persistence-unit>
</persistence>

3、封装JPAUtils工具类

创建一个工具类JPAUtils,获得操作对象(EntityManager)

package cn.zj.jpa.util;

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

public class JPAUtils {

	//同一个应用中,应该保证只有一个实例工厂。
	public static EntityManagerFactory emf = createEntityManagerFactory(); 
	
	//1.获得实体管理工厂 
	private static EntityManagerFactory createEntityManagerFactory(){ 
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("mysql-jpa"); 
		return emf; 
	} 

    //2.获得实体管理类对象 
	public static EntityManager getEntityManger(){ 
		EntityManager entityManager = emf.createEntityManager(); 
		return entityManager; 
	} 
}

4、创建映射实体类

创建一个映射的实体类,将JPA的映射注解写在实体类里面

package cn.zj.jpa.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

//1.指定实体类与表名的关系 
//@Entity注解,指定该实体类是一个基于JPA规范的实体类 
@Entity 
//@Table注解,指定当前实体类关联的表 
@Table(name="tb_student") 
public class Student { 
	//@Id注解:声明属性为一个OID属性 
	@Id 
	//@GeneratedValue注解,指定主键生成策略 
	@GeneratedValue(strategy=GenerationType.IDENTITY) 
	//@Column注解,设置属性与数据库字段的关系,如果属性名和表的字段名相同,可以不设置 
	@Column(name="stu_id") 
	private Long stuId;//BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '学生编号', 
	@Column(name="stu_name") 
	private String stuName;//VARCHAR(50) NULL DEFAULT NULL COMMENT '学生名字', 
	@Column(name="stu_age") 
	private Integer stuAge;//INT(11) NULL DEFAULT NULL COMMENT '学生年龄', 
	@Column(name="stu_password") 
	private String stuPassword;//VARCHAR(50) NULL DEFAULT NULL COMMENT '登录密码', 
   
public Student() {
		super();
	}
//补全get、set方法
} 

5、在总配置文件中加载映射实体类

<?xml version="1.0" encoding="UTF-8"?>
<?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="mysql-jpa">
  
  		<!-- 加载实体类 
		   基于hibernate框架的JPA已经实现了自动载入映射实体类 ,所以不配置也是可以的。建议还是加上配置。如果不写容易忽略加载的实体类有哪些 
	     --> 
	    <class>cn.zj.jpa.entity.Student</class>
  		<!-- 四要素 org.hibernate.cfg.Environment--> 
		<properties> 
    	<!-- 如果使用Hibernate实现的JPA,使用的就是Hibernate的环境参数 --> 
		<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" /> 
		<property name="hibernate.connection.username" value="root" /> 
		<property name="hibernate.connection.password" value="zj" /> 
<!--可选配置--> 
<!--控制台打印sql语句--> 
		<property name="hibernate.show_sql" value="true" /> 
	    <!-- 格式化输出SQL --> 
		<property name="hibernate.format_sql" value="true" /> 
	</properties> 
  </persistence-unit>
</persistence>

6、操作实体类保存数据

创建一个StudentDAOTest类,测试保存一个学生

package cn.zj.jpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import org.junit.Test;
import cn.zj.jpa.entity.Student;
import cn.zj.jpa.util.JPAUtils;

public class StudentDAOTest {

	@Test
	public void persist(){ 
		//1.获得实体管理类 
		EntityManager manager = JPAUtils.getEntityManger(); 
		//2、获取事物管理器
		EntityTransaction transaction = manager.getTransaction(); 
		transaction.begin(); 
		//3、创建实体对象
		Student s=new Student(); 
		s.setStuName("张三"); 
		s.setStuAge(18);
		s.setStuPassword("zj");
		//4、保存到数据库
		manager.persist(s); 
		//5、提交事物
		transaction.commit(); 
		//6、关闭资源
		manager.close(); 
	} 
}

通过操作实体对象保存数据成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值