JPA是Java Persistence API的简称,中文名Java持久层API,是Java持久化的一套标准和规范(ORM),而Hibernate就是对JPA规范的具体实现。
一,依赖
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.6.Final</version>
</dependency>
<!-- mysql(数据库) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.7</version>
</dependency>
二,核心配置文件persistence.xml
注意:需要放到META-INF文件夹下
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<!-- 配置单元 可以配置多个单元 通过该名称指定加载对应的配置信息 -->
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<!-- 属性 --><!-- 数据源和对应的扩展属性 -->
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="hibernate.show_sql" value="true"/>
<!-- 自动生成ddl的策略 create create-drop update validate-->
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</properties>
</persistence-unit>
</persistence>
三,获取EntityManager对象
这里封装了一个工具类
通过EntityManagerFactory创建EntityManager对象
EntityManagerFactory是线程安全的,只创建一次
EntityManager是非线程安全的,每次使用时创建
package demo.jpa.util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
* JAP工具类
* @author xiaohui
*
*/
public class JPAUtil {
/**
* EntityManager工厂对象
*/
private static EntityManagerFactory emf;
static {
emf = Persistence.createEntityManagerFactory("persistenceUnit");
}
private JPAUtil() {}
/**
* 创建EntityManager对象
* @return
*/
public static EntityManager createEntityManager() {
return emf.createEntityManager();
}
}
四,增删查改操作
1,增 persist()
/**
* 保存
*/
@Test
public void save() {
EntityManager em = null;
EntityTransaction transation = null;
try {
em = JPAUtil.createEntityManager();
transation = em.getTransaction();
//开启事务
transation.begin();
User u = new User();
u.setName("test");
u.setPassword("123");
em.persist(u);
//提交事务
transation.commit();
em.close();
} catch (Exception e) {
//回滚事务
transation.rollback();
e.printStackTrace();
}
}
2,删 remove()
/**
* 删除
*/
@Test
public void delete() {
EntityManager em = null;
EntityTransaction transation = null;
try {
em = JPAUtil.createEntityManager();
transation = em.getTransaction();
//开启事务
transation.begin();
User u = em.find(User.class, 1);
if(u!=null)
em.remove(u);
//提交事务
transation.commit();
em.close();
} catch (Exception e) {
//回滚事务
transation.rollback();
e.printStackTrace();
}
}
3,改 merge()
/**
* 更新
*/
@Test
public void update() {
EntityManager em = null;
EntityTransaction transation = null;
try {
em = JPAUtil.createEntityManager();
transation = em.getTransaction();
//开启事务
transation.begin();
User u = new User();
u.setId(1);
u.setName("tom");
u.setPassword("123");
em.merge(u);
//提交事务
transation.commit();
em.close();
} catch (Exception e) {
//回滚事务
transation.rollback();
e.printStackTrace();
}
}
4,查
①查询单条记录 find()
/**
* 查询单条记录
*/
@Test
public void selectOne() {
EntityManager em = null;
try {
em = JPAUtil.createEntityManager();
User user = em.find(User.class, 1);
if(user!=null)
System.out.println(user.getName());
em.close();
} catch (Exception e) {
e.printStackTrace();
}
}
①jpql查询 createQuery()
/**
* 查询多条记录通过jpql语句(hql)查询
*/
@Test
@SuppressWarnings("unchecked")
public void selectListByCreateQuery() {
EntityManager em = null;
try {
em = JPAUtil.createEntityManager();
String jpql = "select u from User u where u.id = ?1 ";
Query query = em.createQuery(jpql,User.class);
query.setParameter(1, 1);//参数类型必须和实体类属性一致
query.setFirstResult(0);
query.setMaxResults(10);
List<User> list = query.getResultList();
System.out.println(list.size());
em.close();
} catch (Exception e) {
e.printStackTrace();
}
}
②sql查询 createNativeQuery()
/**
* 查询多条记录通过sql语句查询
*/
@Test
@SuppressWarnings("unchecked")
public void selectListByCreateNativeQuery() {
EntityManager em = null;
try {
em = JPAUtil.createEntityManager();
String sql = "select * from user where id = ?1 ";
Query query = em.createNativeQuery(sql, User.class);
query.setParameter(1, "1");
query.setFirstResult(0);
query.setMaxResults(10);
List<User> list = query.getResultList();
System.out.println(list.size());
em.close();
} catch (Exception e) {
e.printStackTrace();
}
}