jpa介绍
2024-09-05 11:23:26
1.jpa的介绍
JPA是Java Persistence API的简称, 中文名为Java持久层API;
是JDK 5.0注解或XML描述对象-关系表的映射关系, 并将运行期的实体对象持久化到数据库中。
JPA包括以下3方面的内容:
1) 一套API标准。
在javax.persistence的包下面, 用来操作实体对象, 执行CRUD操作, 框架在后台替代我们完成所有的事情, 开发者从烦琐的JDBC和SQL代码中解脱出来。
2) 面向对象的查询语言: Java Persistence Query Language(JPQL) 。
这是持久化操作中很重要的一个方面, 通过面向对象而非面向数据库的查询语言查询数据, 避免程序的SQL语句紧密耦合。
3) ORM(object/relational metadata) 元数据的映射。
JPA支持XML和JDK5.0注解两种元数据的形式, 元数据描述对象和表之间的映射关系, 框架据此将实体对象持久化到数据库表中。
总的来说:
jpa是用于对象持久化的API;
是jave EE5.0平台的标准ORM规范,其作用是使得应用程序以统一的方式来访问持久层;
目前主要使用的jap实现是hibernate;
2.jpa和hibernate
1)jap是规范:
jpa本质上是一种ORM规范而不是ORM框架;
jpa并未提供ORM实现,它只制定了一些规范提供了编程的API接口,具体的实现则由ORM框架比如Hibernate等来实现;
2)Hibernate是实现:
Hibernate 3.2+实现了jpa规范;
3.使用jpa持久化对象
大概步骤:
1】创建persistence.xml配置文件,在这个文件中配置持久化单元:
->指定和哪个数据库交互;
->指定jpa使用的ORM框架以及配置该框架的基本属性;
2】创建实体类,使用注解来描述实体类和数据库之间的映射关系;
3】使用jpa的API来进行数据的增删查改操作;
->创建EntityManagerFactory;
->创建EntityManager,用它完成增删改查;
4.利用jpa操作实例
1)eclipse->new->JPA Projiect
注意jpa版本选2.0;
会自动生成persistence.xml配置文件;
2)在工程下新建一个lib目录,放入jar包;
需要的jar包:
hibernate的全部;
mysql的驱动;
jpa的全部;
3)修改配置文件persistence.xml
1】配置mysql数据库:
事务方式选本地事务Resource Local;
可打开persistence.xml.选Collection,填写即可;当然手动修改配置文件的代码也行;
2】配置hibernate
provider标签指定框架为hibernate;
在properties标签里加入propertie标签来配置hibernate的属性;
<?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/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="jap_emp" transaction-type="RESOURCE_LOCAL">
<!-- 配置提供jpa实现的ORM框架 ,若只有一种jpa实现框架不配置也可以-->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<!-- 连接数据库配置 -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1/myjpa"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<!-- 配置jpa的实现框架hibernate的基本属性 -->
<!-- 格式化sql -->
<property name="hibernate.format_sql" value="true"/>
<!--显示sql -->
<property name="hibernate.show_sql" value="true"/>
<!--生成数据表的策略 -->
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
4)创建实体类Emp
这里的实体类用注解和数据库的表映射;
主要的注解:
@Table ->用在实体类名前;name属性指定表名;如果不指定默认表名和类名一样;
@Entity ->实体类前面;
@Colunm ->用在实体类属性前或get方法前面;用来映射实体类和表列名;name属性指定列名;可以省略;省略时表的列名和属性名一样;
@Id ->用在对应表的主键的属性前;
@GeneratedValue ->用来指定主键的生成策略
package com.liusir.java;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Table(name="tb_emp")
@Entity
public class Emp {
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
private Integer id;
private String name;
private Date birthday;
private Integer salary;
//getter setter
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
}
创建好实体类后,将完整的类名注入到persistence.xml中;
也就是在配置文件中添加一条class标签:
<!--添加持久化类 -->
<class>com.liusir.java.Emp</class>
5)测试用的main方法
主要步骤:
1】创建EntityManagerFactory;
2】创建EntityManager;
3】开启事务;
4】进行持久化操作;
5】提交事物
6】关闭EntityManager
7】关闭EntityManagerFactory;
package com.liusir.java;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class TestEmp {
public static void main(String[] args) {
//对应persistence.xml文件里的persistence-unit标签中的 name属性;默认为工程名
String persistenceUnitName="jpa_emp";
//1.创建EntityManagerFactory
EntityManagerFactory factory=Persistence.createEntityManagerFactory(persistenceUnitName);
//2.创建EntityManager
EntityManager entityManager=factory.createEntityManager();
//3.开启事务
EntityTransaction transaction=entityManager.getTransaction();
transaction.begin();
//4.持久化操作
Emp emp=new Emp();
emp.setName("诸葛村夫");
emp.setSalary(1000);
emp.setBirthday(new Date());
entityManager.persist(emp);
//5.提交事务
transaction.commit();
//6.关闭EntityManager
entityManager.close();
//7.关闭EntityManagerFactory
factory.close();
}
}
6)结果
在数据库中自动创建了一个表;
并且在表中插入了一条数据;
最新文章
- Go语言http包Form解析之坑
- Python之路【第七篇续】:I/O多路复用
- Flex 学习笔记 ComboBox内容框宽度
- 20145301&;20145321&;20145335实验一
- SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)
- 内核源码分析之linux内核栈(基于3.16-rc4)
- android初学-togglebutton
- [转载]iframe跨域
- MarkupExtension的使用
- 学会使用git
- 《细说 new与 malloc 的 10 点区别》
- 《算法问题实战策略》——chaper9——动态规划法技巧
- js事件绑定函数
- TextFormField数据处理
- [转帖]Gartner预测2019年全球IT支出将达到3.8万亿美元
- Spark RDD操作之Map系算子
- 挂载本地iso镜像
- java 装饰设计模式模式
- poj3207 Ikki&#39;s Story IV - Panda&#39;s Trick 2-SAT
- SQL注入原理讲解