SpringDataJpa(一)(下)

简介: SpringDataJpa(一)

SpringDataJpa(一)(上)+https://developer.aliyun.com/article/1556643

2.6 使用JPA完成增删改查操作

在JpaTest.java里面,完成以下函数

2.6.1 保存

package cn.itcast.test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.JpaUtils;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
public class JpaTest {
    /**
     * 测试jpa的保存
     *      案例:保存一个客户到数据库中
     *  Jpa的操作步骤
     *     1.加载配置文件创建工厂(实体管理器工厂)对象
     *     2.通过实体管理器工厂获取实体管理器
     *     3.获取事务对象,开启事务
     *     4.完成增删改查操作
     *     5.提交事务(回滚事务)
     *     6.释放资源
     */
    @Test
    public void testSave() {
//        //1.加载配置文件创建工厂(实体管理器工厂)对象
//        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
//        //2.通过实体管理器工厂获取实体管理器
//        EntityManager em = factory.createEntityManager();
        EntityManager em = JpaUtils.getEntityManager();
        //3.获取事务对象,开启事务
        EntityTransaction tx = em.getTransaction(); //获取事务对象
        tx.begin();//开启事务
        //4.完成增删改查操作:保存一个客户到数据库中
        Customer customer = new Customer();
        customer.setCustName("传智播客");
        customer.setCustIndustry("1教育");
        //保存,
        em.persist(customer); //保存操作
        //5.提交事务
        tx.commit();
        //6.释放资源
        em.close();
        //       factory.close();
    }
}

2.6.2 修改

@Test
    public  void testUpdate() {
        //1.通过工具类获取entityManager
        EntityManager entityManager = JpaUtils.getEntityManager();
        //2.开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        
        //3.增删改查 -- 更新操作
        //i 查询客户
        Customer customer = entityManager.find(Customer.class,1l);
        //ii 更新客户
        customer.setCustIndustry("it教育");
        entityManager.merge(customer);
        //4.提交事务
        tx.commit();
        //5.释放资源
        entityManager.close();
    }

2.6.3 删除

@Test
    public  void testRemove() {
        EntityManager entityManager = JpaUtils.getEntityManager();
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        
        //3.增删改查 -- 删除客户
        //i 根据id查询客户
        Customer customer = entityManager.find(Customer.class,1l);
        //ii 调用remove方法完成删除操作
        entityManager.remove(customer);
        tx.commit();
        entityManager.close();
    }

2.6.4 根据id查询

/**
   * 查询一个: 使用立即加载的策略
   */
  @Test
  public void testGetOne() {
    // 定义对象
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
      em = JPAUtil.getEntityManager();
      tx = em.getTransaction();
      tx.begin();
            
      // 执行操作
      Customer c1 = em.find(Customer.class, 1L);
      
            // 提交事务
      tx.commit();
      System.out.println(c1); // 输出查询对象
    } catch (Exception e) {
      // 回滚事务
      tx.rollback();
      e.printStackTrace();
    } finally {
      // 释放资源
      em.close();
    }
  }
  // 查询实体的缓存问题
  @Test
  public void testGetOne() {
    // 定义对象
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
      em = JPAUtil.getEntityManager();
      tx = em.getTransaction();
      tx.begin();
            
      // 执行操作
      Customer c1 = em.find(Customer.class, 1L);
      Customer c2 = em.find(Customer.class, 1L);
      System.out.println(c1 == c2);// 输出结果是true,EntityManager也有缓存
      
            // 提交事务
      tx.commit();
      System.out.println(c1);
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
  }
  // 延迟加载策略的方法:
  /**
   * 查询一个: 使用延迟加载策略
   */
  @Test
  public void testLoadOne() {
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
      em = JPAUtil.getEntityManager();
      tx = em.getTransaction();
      tx.begin();
            
      // 执行操作
      Customer c1 = em.getReference(Customer.class, 1L);
      tx.commit();
      System.out.println(c1);
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
  }

2.7 JPQL查询

Java Persistence Query Language

基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起。使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。

其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。

2.7.1 查询全部

延用上述代码,用JpqlTest.java替代JpaTest.java进行查询

JpqlTest.java

package cn.itcast.test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.JpaUtils;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import java.util.List;
/**
 * 测试jqpl查询
 */
public class JpqlTest {
    /**
     * 查询全部
     *      jqpl:from cn.itcast.domain.Customer
     *      sql:SELECT * FROM cst_customer
     */
    @Test
    public void testFindAll() {
        EntityManager em = JpaUtils.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        
        //3.查询全部
        String jpql = "from Customer ";
        Query query = em.createQuery(jpql);//创建Query查询对象,query对象才是执行jqpl的对象
        //发送查询,并封装结果集
        List list = query.getResultList();
        for (Object obj : list) {
            System.out.print(obj);
        }
        tx.commit();
        em.close();
    }
}

2.7.2 分页查询

@Test
  public void findPaged () {
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
      em = JPAUtil.getEntityManager();
      tx = em.getTransaction();
      tx.begin();
      //创建query对象
      String jpql = "from Customer";
      Query query = em.createQuery(jpql);
            
      //起始索引
      query.setFirstResult(0);
      //每页显示条数
      query.setMaxResults(2);
      //查询并得到返回结果
      List list = query.getResultList(); //得到集合返回类型
      for (Object object : list) {
        System.out.println(object);
      }
      
            tx.commit();
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
  }

2.7.3 条件查询

@Test
  public void findCondition () {
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
      em = JPAUtil.getEntityManager();
      tx = em.getTransaction();
      tx.begin();
            
      //创建query对象
      String jpql = "from Customer where custName like ? ";
      Query query = em.createQuery(jpql);
      
            //对占位符赋值,从1开始
      query.setParameter(1, "传智播客%");
      //查询并得到返回结果
      Object object = query.getSingleResult(); //得到唯一的结果集对象
      System.out.println(object);
      
            tx.commit();
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
  }

2.8.4 排序查询

//根据客户id倒序查询所有客户
  //查询所有客户
  @Test
  public void testOrder() {
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
      em = JPAUtil.getEntityManager();
      tx = em.getTransaction();
      tx.begin();
            
      // 创建query对象
      String jpql = "from Customer order by custId desc";
      Query query = em.createQuery(jpql);
            
      // 查询并得到返回结果
      List list = query.getResultList(); // 得到集合返回类型
      for (Object object : list) {
        System.out.println(object);
      }
            
      tx.commit();
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
  }

2.8.5 统计查询

@Test
  public void findCount() {
    EntityManager em = null;
    EntityTransaction tx = null;
    try {
      em = JPAUtil.getEntityManager();
      tx = em.getTransaction();
      tx.begin();
            
      // 查询全部客户
      // 1.创建query对象
      String jpql = "select count(custId) from Customer";
      Query query = em.createQuery(jpql);
      
            // 2.查询并得到返回结果
      Object count = query.getSingleResult(); // 得到集合返回类型
      System.out.println(count);
            
      tx.commit();
    } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
    } finally {
      em.close();
    }
  }
目录
相关文章
|
4天前
|
Java 数据库连接 API
SpringDataJpa(一)(上)
SpringDataJpa(一)
10 0
|
4天前
|
SQL 安全 Java
SpringDataJpa(三)(上)
SpringDataJpa(三)(上)
7 0
|
4天前
|
Java 数据库 Spring
SpringDataJpa(三)(下)
SpringDataJpa(三)(下)
6 0
|
4天前
|
SQL Java 数据库连接
SpringDataJpa(二)
SpringDataJpa(二)
6 0
|
11月前
|
JSON 前端开发 Java
SpringBoot@RequestParam和@PathVariable的作用--【JSB系列之006外篇】
SpringBoot@RequestParam和@PathVariable的作用--【JSB系列之006外篇】
|
SQL 存储 Java
springDataJPA的基本使用
springDataJPA的基本使用
89 0
Springboot中@RequestParam和@PathVariable的用法与区别
Springboot中@RequestParam和@PathVariable的用法与区别
|
SQL 存储 Oracle
JPA 概述及常用注解详解、SpringDataJpa 使用指南
JPA 概述及常注解详解、SpringDataJpa 使用指南
4774 2
JPA 概述及常用注解详解、SpringDataJpa 使用指南
|
Java
SpringDataJPA如何CRUD?
SpringDataJPA如何CRUD?
77 0
|
SQL Java 数据库连接
SpringDataJpa:JpaRepository增删改查
SpringDataJpa:JpaRepository增删改查
259 0
SpringDataJpa:JpaRepository增删改查