SpringDataJpa(二) JPA 基本操作

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();   
   
发布了47 篇原创文章 · 获赞 7 · 访问量 2334

猜你喜欢

转载自blog.csdn.net/qq_43616898/article/details/104332735