您的位置 首页 java

Hibernate 中怎么用 Java Persistence API (JPA)?

引言

hibernate 中,有三种方式来实现crud。

  1. hibernate api+ hbm.xml(xml配置文件)
  2. hibernate api+Annotation Mappings(注解)
  3. Java persistence API ( jpa )

熟悉hibernate的同学都知道,前两种是用的比较多的。jpa呢在spring data 中也用过,但是原生的jpa这套api本人还没有用过。所以今天趁机来玩一玩,应该对学spring data jpa有些帮助。

什么是JPA

JPA是Java Persistence API的简称,早期有很多orm框架,这些框架各自为王,自己都有自己标准,因此sun为了统一orm框架,因此提出了这套规范,很明显hibernate就实现了这套规范。

环境搭建

导入jar包

特别注意的是 hibernate-entitymanager-5.0.7.Final.jar,一定要导。在jpa文件下面。

新建persistence.xml

这里需要注意的,此文件必须放在META-INF包下,比如:

至于为什么嘛,乌龟的屁股,规定啊。

编写 Persistence .xml

<persistence xmlns=""
 xmlns:xsi=""
 xsi:schemaLocation=" "
 version="2.0">
 <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
 <!-- 配置jpa ORM产品 -->
 <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
 <!-- 添加对应的持久化类 -->
 <class>com.javazzh.hibernate.demo1.CstCustomer</class>
 <properties>
 <!-- 数据源 -->
 <property name=" javax .persistence. jdbc .driver" 
 value="com. mysql .jdbc.Driver" />
 <property name="javax.persistence.jdbc.url" 
 value="jdbc:mysql://localhost:3306/hibernate_jpa" />
 <property name="javax.persistence.jdbc.user" 
 value="root" />
 <property name="javax.persistence.jdbc.password" 
 value="root"/>
 <!-- hibernate特殊属性 -->
 <property name="hibernate.show_sql" 
 value="true" />
 <property name="hibernate.format_sql" 
 value="true" />
 </properties>
 </persistence-unit>
</persistence>
 

创建持久化类

import javax.persistence.*;
@Entity
@Table(name="cst_customer")
public class Customer {
 @Id
 @Column(name = "cust_id")
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long custId;
 @Column(name = "cust_name")
 private String custName;
 @Column(name = "cust_user_id")
 private Long custUserId;
 @Column(name = "cust_create_Id")
 private Long custCreateId;
 @Column(name = "cust_source")
 private String custSource;
 @Column(name = "cust_industry")
 private String custIndustry;
 @Column(name = "cust_level")
 private String custLevel;
 @Column(name = "cust_linkman")
 private String custLinkman;
 @Column(name = "cust_phone")
 private String custPhone;
 @Column(name = "cust_mobile")
 private String custMobile;



 省略getter/setter...
}
 

api使用

保存

查询单个对象

修改

删除

查询列表

这里的 from Customer 看上去和hql一样,但是实际上叫做 jpql,哈哈 换汤不换药。
 

分页查询

代码如下:

/**
 * 保存客户
 */
@Test
public void test0(){
 /*1.获取实体管理工厂*/
 EntityManagerFactory factory = Persistence.
 createEntityManagerFactory("jpa");
 /*2.获取实体管理*/
 EntityManager entityManager = factory.createEntityManager();
 /*3.获取事务对象*/
 EntityTransaction transaction = entityManager.getTransaction();
 /*4.开启事务*/
 transaction.begin();
 Customer customer = new Customer();
 customer.setCustName("学友");
 customer.setCustLevel("王者");
 /*5.操作*/
 entityManager.persist(customer);
 /*6.提交事务*/
 transaction. commit ();
 /*7.关闭实体管理*/
 entityManager. close ();
}
/**
 * 根据id查询客户
 */
@Test
public void test1(){
 /*1.获取实体管理工厂*/
 EntityManagerFactory factory = Persistence.
 createEntityManagerFactory("jpa");
 /*2.获取实体管理*/
 EntityManager entityManager = factory.createEntityManager();
 /*3.获取事务对象*/
 EntityTransaction transaction = entityManager.getTransaction();
 /*4.开启事务*/
 transaction.begin();
 /*5.操作*/
 // find  == session.get
 //Customer customer = entityManager.find(Customer.class, 2L);
 //getReference == session.load
 Customer customer = entityManager.getReference(Customer.class, 2L);
 System.out.println(customer.getCustName());
 /*6.提交事务*/
 transaction.commit();
 /*7.关闭实体管理*/
 entityManager.close();
}
/**
 * 修改客户
 */
@Test
public void test2(){
 /*1.获取实体管理工厂*/
 EntityManagerFactory factory = Persistence.
 createEntityManagerFactory("jpa");
 /*2.获取实体管理*/
 EntityManager entityManager = factory.createEntityManager();
 /*3.获取事务对象*/
 EntityTransaction transaction = entityManager.getTransaction();
 /*4.开启事务*/
 transaction.begin();
 /*5.操作*/
 Customer customer = entityManager.find(Customer.class, 2L);
 customer.setCustName("学友");
 entityManager.persist(customer);
 /*6.提交事务*/
 transaction.commit();
 /*7.关闭实体管理*/
 entityManager.close();
}
/**
 * 删除客户
 */
@Test
public void test3(){
 /*1.获取实体管理工厂*/
 EntityManagerFactory factory = Persistence.
 createEntityManagerFactory("jpa");
 /*2.获取实体管理*/
 EntityManager entityManager = factory.createEntityManager();
 /*3.获取事务对象*/
 EntityTransaction transaction = entityManager.getTransaction();
 /*4.开启事务*/
 transaction.begin();
 /*5.操作*/
 Customer customer = entityManager.find(Customer.class, 2L);
 entityManager.remove(customer);
 /*6.提交事务*/
 transaction.commit();
 /*7.关闭实体管理*/
 entityManager.close();
}
/**
 * 查询列表
 */
@Test
public void test4(){
 /*1.获取实体管理工厂*/
 EntityManagerFactory factory = Persistence.
 createEntityManagerFactory("jpa");
 /*2.获取实体管理*/
 EntityManager entityManager = factory.createEntityManager();
 /*3.获取事务对象*/
 EntityTransaction transaction = entityManager.getTransaction();
 /*4.开启事务*/
 transaction.begin();
 /*5.操作*/
 List<Customer> list = entityManager.createQuery("from Customer", Customer.class).getResultList();
 list.forEach(customer -> System.out.println(customer.getCustName()));
 /*6.提交事务*/
 transaction.commit();
 /*7.关闭实体管理*/
 entityManager.close();
}
/**
 * 查询分页列表
 */
@Test
public void test5(){
 /*1.获取实体管理工厂*/
 EntityManagerFactory factory = Persistence.
 createEntityManagerFactory("jpa");
 /*2.获取实体管理*/
 EntityManager entityManager = factory.createEntityManager();
 /*3.获取事务对象*/
 EntityTransaction transaction = entityManager.getTransaction();
 /*4.开启事务*/
 transaction.begin();
 /*5.操作*/
 List<Customer> list = entityManager.createQuery("from Customer", Customer.class)
 .setFirstResult(0)
 .setMaxResults(2)
 .getResultList();
 list.forEach(customer -> System.out.println(customer.getCustName()));
 /*6.提交事务*/
 transaction.commit();
 /*7.关闭实体管理*/
 entityManager.close();
}
 

总结

头条中,贴代码简直就是人间地狱啊,不过这既然是总结,为了方便后面用的着,除了图片外,还是把代码贴上。

以上就是jpa api的基本用法。整体的思路和hibernate 同出一辙,懂hibernate api就自然懂jpa api。

文章来源:智云一二三科技

文章标题:Hibernate 中怎么用 Java Persistence API (JPA)?

文章地址:https://www.zhihuclub.com/191574.shtml

关于作者: 智云科技

热门文章

网站地图