SpringDataJpa(二) JPA 基本操作
1.操作步骤
1)加载配置文件创建实体管理器工厂
- Persistence.createEntityManagerFactory(“持久化单元名称”): 根据持久化单元名称创建实体管理器工厂
- EntityManagerFactory 内部维护了很多内容
- 内部维护了数据库信息
- 维护了缓存信息
- 维护了所有的实体管理器对象
- 创建EntityManagerFactory对象的过程中,会根据配置文件创建数据库表
- EntityManagerFactory 创建过程比较耗费资源
- 特点:线程安全
- 多个线程访问同一个EntityManagerFactory 不会有线程安全问题
- 解决思路: 创建一个公共的EntityManagerFactory对象
2)根据实体管理器工厂,创建实体管理器
- EntityManagerFactory 的createManager() 方法 创建EntityManager对象
3)创建事务对象,开启事务
- EntityManager 的 beginTransaction() 方法: 创建事务对象
- begin(): 开启事务
- commit(): 提交事务
- rollback(): 回滚
4)增删改查操作:
- presist(Object obj): 保存
- merge(Object obj): 更新操作
- remove(Object obj): 删除操作
- find(Class clazz, primaryKey 主键): 立即查询
- getRefrence(Class clazz, primaryKey 主键): 延时加载
5)提交事务
6)释放资源
2.操作
jpaUtils.java
/**
* Jpa 工具类:
* EntityManagerFactory 工厂的创建比较耗费资源,而且是线程安全的
* 采用静态代码块的方式创建,只被创建一次
*
*/
public class JpaUtils {
private static EntityManagerFactory entityManagerFactory = null;
static{
//加载配置文件,创建 entityManagerFactory 类
entityManagerFactory = Persistence.createEntityManagerFactory("myJpa");
}
/**
* 创建实体管理类
* @return
*/
public static EntityManager getEntityManager(){
return entityManagerFactory.createEntityManager();
}
}
jpa基本操作
//创建实体管理器对象
EntityManager entityManager = JpaUtils.getEntityManager();
//获取事务对象
EntityTransaction tx = entityManager.getTransaction();
//开启事务
tx.begin();
//根据id 查询 立即加载
Customer customer = entityManager.find(Customer.class, 1l);
//延迟加载
Customer customer = entityManager.getReference(Customer.class, 1l);
//删除指定记录 先查询后删除
entityManager.remove(customer);
//更新指定记录
entityManager.merge(customer); //更新
//保存记录
entityManager.persist(customer);
//提交事务
tx.commit();
//关闭资源
entityManager.close();
jpql 操作
/**
* 查询全部
*/
Query query = entityManager.createQuery("from Customer");
List resultList = query.getResultList();
/**
* 排序查询
*/
Query query = entityManager.createQuery("from Customer order by custId desc");
List resultList = query.getResultList();
/**
* 统计查询
*/
Query query = entityManager.createQuery("select count(custId) from Customer");
// 获取唯一的结果集
Object singleResult = query.getSingleResult();
/**
* 分页查询
*/
Query query = entityManager.createQuery("from Customer");
//设置参数
query.setFirstResult(1); //设置起始页
query.setMaxResults(2); //每页记录数
/**
* 模糊查询
*/
Query query = entityManager.createQuery("from Customer where custName like ?");
//设置参数 索引位置从1 开始 名字以h 开头
query.setParameter(1, "h%");
List resultList = query.getResultList();