1. jpa学习笔记一:jpa介绍,jpa工程创建,jpa小demo1.1. 什么是jpa1.2. jpa包含3方面技术1.3. 使用jpa持久化对象步骤:1.4. 创建JPA框架1.5. 写实体类映射数据库表
1. jpa学习笔记一:jpa介绍,jpa工程创建,jpa小demo
1.1. 什么是jpa
首先说一下jdbc的形成史,jdbc是一个接口,里面定义了各种数据库的同一接口方法,比如mysql,oracle ,DB2等。这些厂商,根据接口,实现接口中的方法,其实现类就在他们提供的jar包中,我们只需要将jar包导入即可。
jpa:即:java Persistence API 对象持久化API。其实jpa的作用如同jdbc的作用,市场上有很多ORM框架(对象关系映射框架),例如Hibernate,ToPlink等等,这些ORM框架跟数据库一样有很多,于是sun公司就仿造jdbc写了一个接口,这个接口,用于提供一种方法规范,ORM框架去实现这个方法。这就形成了面向JPA开发。
jpa是Hibernate的功能的一个子集,其实Hibernate对jpa的支持力度非常大。jpa几乎全程使用注解。jpa的作者就是hibernate的作者。他搞出来jpa,说白了是对jpa的一种推广。
jpa定义了独特的语言,叫jpql语言用于操作数据库,与hibernate的hql语言类似。
1.2. jpa包含3方面技术
==ORM映射元数据== ,jpa提供xml和jdk5.0注解的两种元数据的方式,元数据用于描述实体类与数据库表之间的关系。
==JPA的API用于操作实体对象== ,执行CRUD操作,框架在后台完成所有的事情,让开发人员从繁琐的jdbc和sql中解脱出来。
==查询语言JPQL== 实现面向对象查询数据库,而不是面向数据库查询数据。
1.3. 使用jpa持久化对象步骤:
创建persistence.xml
创建实体类,使用annotation(注解)方式来描述实体类跟数据库表之间的映射关系。
使用Jpa的API完成数据的增加,删除,修改,和查询操作。
1.4. 创建JPA框架
在Eclipse中创建Jpa Project
添加lib文件夹,加入jar包,jar包包含所要用的ORM框架jar,还有连接数据库的驱动。
配置persistence.xml的配置信息
配置Hibernate框架的属性。
1<!-- 配置JPA实现产品的基本属性,配置Hibernate的基本属性。 -->2<!-- 该配置指定hibernate的生成数据库表的生成策略 -->3<property name="hibernate.hbm2ddl.auto" value="update"/>4<!-- 配置让Hibernate在执行时在控制台显示sql -->5<property name="hibernate.show_sql" value="true"/>6<!-- 配置让Hibernate在显示sql时能格式化sql -->7<property name="hibernate.format_sql" value="true"/><!-- 配置JPA实现产品的基本属性,配置Hibernate的基本属性。 -->
2<!-- 该配置指定hibernate的生成数据库表的生成策略 -->
3<property name="hibernate.hbm2ddl.auto" value="update"/>
4<!-- 配置让Hibernate在执行时在控制台显示sql -->
5<property name="hibernate.show_sql" value="true"/>
6<!-- 配置让Hibernate在显示sql时能格式化sql -->
7<property name="hibernate.format_sql" value="true"/>
要配置使用什么orm产品,来作为jpa的实现。
1<!-- 配置jpa的实现类,即:使用什么ORM框架实现该JPA 2 1.实际上配置的是 javax.persistence.spi.PersistenceProvider的实现类3 2.若jpa中只有一个该产品实现类,也可以不配置该节点。4 -->5<provider>org.hibernate.ejb.HibernatePersistence</provider><!-- 配置jpa的实现类,即:使用什么ORM框架实现该JPA
2 1.实际上配置的是 javax.persistence.spi.PersistenceProvider的实现类
3 2.若jpa中只有一个该产品实现类,也可以不配置该节点。
4 -->
5<provider>org.hibernate.ejb.HibernatePersistence</provider>
总结一下配置过程
1<?xml version="1.0" encoding="UTF-8"?> 2<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"> 3 <persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL"> 4 <!-- 配置jpa的实现类,即:使用什么ORM框架实现该JPA 5 1.实际上配置的是 javax.persistence.spi.PersistenceProvider的实现类 6 2.若jpa中只有一个该产品实现类,也可以不配置该节点。 7 --> 8 <provider>org.hibernate.ejb.HibernatePersistence</provider> 9 <properties>10 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>11 <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>12 <property name="javax.persistence.jdbc.user" value="root"/>13 <property name="javax.persistence.jdbc.password" value="123456"/>14 <!-- 配置JPA实现产品的基本属性,配置Hibernate的基本属性。 -->15 <!-- 该配置指定hibernate的生成数据库表的生成策略 -->16 <property name="hibernate.hbm2ddl.auto" value="update"/>17 <!-- 配置让Hibernate在执行时在控制台显示sql -->18 <property name="hibernate.show_sql" value="true"/>19 <!-- 配置让Hibernate在显示sql时能格式化sql -->20 <property name="hibernate.format_sql" value="true"/>21 </properties>22 </persistence-unit>23</persistence><?xml version="1.0" encoding="UTF-8"?>
2<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">
3 <persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
4 <!-- 配置jpa的实现类,即:使用什么ORM框架实现该JPA
5 1.实际上配置的是 javax.persistence.spi.PersistenceProvider的实现类
6 2.若jpa中只有一个该产品实现类,也可以不配置该节点。
7 -->
8 <provider>org.hibernate.ejb.HibernatePersistence</provider>
9 <properties>
10 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
11 <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>
12 <property name="javax.persistence.jdbc.user" value="root"/>
13 <property name="javax.persistence.jdbc.password" value="123456"/>
14 <!-- 配置JPA实现产品的基本属性,配置Hibernate的基本属性。 -->
15 <!-- 该配置指定hibernate的生成数据库表的生成策略 -->
16 <property name="hibernate.hbm2ddl.auto" value="update"/>
17 <!-- 配置让Hibernate在执行时在控制台显示sql -->
18 <property name="hibernate.show_sql" value="true"/>
19 <!-- 配置让Hibernate在显示sql时能格式化sql -->
20 <property name="hibernate.format_sql" value="true"/>
21 </properties>
22 </persistence-unit>
23</persistence>
1.5. 写实体类映射数据库表
用注释的方式进行映射
1@Table(name="JPA_CUSTOMERS") 2@Entity 3public class Customer { 4 private Integer id; 5 private String lastName; 6 private String email; 7 private int age; 8 9 @GeneratedValue(strategy=GenerationType.AUTO)10 @Id11 public Integer getId() {12 return id;13 }14 public void setId(Integer id) {15 this.id = id;16 }17 @Column(name="LAST_NAME")18 public String getLastName() {19 return lastName;20 }@Table(name="JPA_CUSTOMERS")
2@Entity
3public class Customer {
4 private Integer id;
5 private String lastName;
6 private String email;
7 private int age;
8
9 @GeneratedValue(strategy=GenerationType.AUTO)
10 @Id
11 public Integer getId() {
12 return id;
13 }
14 public void setId(Integer id) {
15 this.id = id;
16 }
17 @Column(name="LAST_NAME")
18 public String getLastName() {
19 return lastName;
20 }
在persistences.xml中配置该实体类的全限名。表示该实体类与JPA有了关系。
1<class>com.atguigu.jpa.helloworld.Customer</class><class>com.atguigu.jpa.helloworld.Customer</class>
测试类
1public static void main(String[] args) { 2 //1. 创建EntitymanagerFactory 3 String persistenceUnitName="jpa-1"; 4 EntityManagerFactory entityManagerFactory=Persistence.createEntityManagerFactory(persistenceUnitName); 5 //2.创建EntityManager 6 EntityManager entityManager=entityManagerFactory.createEntityManager(); 7 //3.开启事务 8 EntityTransaction tr = entityManager.getTransaction(); 9 tr.begin();10 //4. 进行持久化操作11 Customer customer =new Customer();12 customer.setAge(11);13 customer.setEmail("Tom");14 customer.setEmail("zkfgyzy@email.com");15 customer.setLastName("张三");16 entityManager.persist(customer);17 //5. 提交事务18 tr.commit();19 //6. 关闭EntityManager20 entityManager.close();21 //7. 关闭EntityManagerFactory22 entityManagerFactory.close();23}public static void main(String[] args) {
2 //1. 创建EntitymanagerFactory
3 String persistenceUnitName="jpa-1";
4 EntityManagerFactory entityManagerFactory=Persistence.createEntityManagerFactory(persistenceUnitName);
5 //2.创建EntityManager
6 EntityManager entityManager=entityManagerFactory.createEntityManager();
7 //3.开启事务
8 EntityTransaction tr = entityManager.getTransaction();
9 tr.begin();
10 //4. 进行持久化操作
11 Customer customer =new Customer();
12 customer.setAge(11);
13 customer.setEmail("Tom");
14 customer.setEmail("zkfgyzy@email.com");
15 customer.setLastName("张三");
16 entityManager.persist(customer);
17 //5. 提交事务
18 tr.commit();
19 //6. 关闭EntityManager
20 entityManager.close();
21 //7. 关闭EntityManagerFactory
22 entityManagerFactory.close();
23}