jpa学习笔记一:jpa介绍,jpa工程创建,jpa小demo

 
 

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
  1. 首先说一下jdbc的形成史,jdbc是一个接口,里面定义了各种数据库的同一接口方法,比如mysql,oracle ,DB2等。这些厂商,根据接口,实现接口中的方法,其实现类就在他们提供的jar包中,我们只需要将jar包导入即可。

640?wx_fmt=png
jdbc接口
  1. jpa:即:java Persistence API 对象持久化API。其实jpa的作用如同jdbc的作用,市场上有很多ORM框架(对象关系映射框架),例如Hibernate,ToPlink等等,这些ORM框架跟数据库一样有很多,于是sun公司就仿造jdbc写了一个接口,这个接口,用于提供一种方法规范,ORM框架去实现这个方法。这就形成了面向JPA开发。

640?wx_fmt=png
jpa接口
  1. jpa是Hibernate的功能的一个子集,其实Hibernate对jpa的支持力度非常大。jpa几乎全程使用注解。jpa的作者就是hibernate的作者。他搞出来jpa,说白了是对jpa的一种推广。

  2. jpa定义了独特的语言,叫jpql语言用于操作数据库,与hibernate的hql语言类似。

1.2. jpa包含3方面技术
  1. ==ORM映射元数据== ,jpa提供xml和jdk5.0注解的两种元数据的方式,元数据用于描述实体类与数据库表之间的关系。

  2. ==JPA的API用于操作实体对象== ,执行CRUD操作,框架在后台完成所有的事情,让开发人员从繁琐的jdbc和sql中解脱出来。

  3. ==查询语言JPQL== 实现面向对象查询数据库,而不是面向数据库查询数据。

1.3. 使用jpa持久化对象步骤:
  1. 创建persistence.xml

  1. 创建实体类,使用annotation(注解)方式来描述实体类跟数据库表之间的映射关系。

  2. 使用Jpa的API完成数据的增加,删除,修改,和查询操作。

1.4. 创建JPA框架
  1. 在Eclipse中创建Jpa Project

  2. 添加lib文件夹,加入jar包,jar包包含所要用的ORM框架jar,还有连接数据库的驱动。

640?wx_fmt=png
jpa框架需要的jar
  1. 配置persistence.xml的配置信息

640?wx_fmt=png
搭建jpa框架
  1. 配置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"/>
  1. 要配置使用什么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. 总结一下配置过程

 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. 用注释的方式进行映射

 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    }
  1. 在persistences.xml中配置该实体类的全限名。表示该实体类与JPA有了关系。

1<class>com.atguigu.jpa.helloworld.Customer</class><class>com.atguigu.jpa.helloworld.Customer</class>
  1. 测试类

 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}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值