JPA的API使用

目录

 

JPAUtil工具类

保存

根据id查询

修改

删除

JPA中的复杂查询

查询全部

分页查询

条件查询

排序查询

统计查询


JPAUtil工具类

public class JPAUtil {
    private static final EntityManagerFactory factory;

    static {
        factory = Persistence.createEntityManagerFactory("myJpa");
    }

    public static EntityManager getEntityManager(){
        return factory.createEntityManager();
    }


}

保存

@Test
public void testSave() {
    Customer customer = new Customer();
    customer.setCustName("测试");

    EntityManager em = JPAUtil.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();

    em.persist(customer);

    tx.commit();
    em.close();

}

根据id查询

find方法是会使用缓存的

	@Test
    public void testFind() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        Customer customer = em.find(Customer.class, 1L);
        System.out.println(customer);
        tx.commit();
        em.close();
    }

使用延迟加载策略 查询

延迟加载,调用getReference时,不会发送sql语句查询数据库,而是当使用这个对象时(获取对象的属性),再去查询数据库;

​ 返回的是代理对象;

	/**
     * 查询一个: 使用延迟加载策略
     */
    @Test
    public void testFind3() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        Customer customer = em.getReference(Customer.class,1L);
        System.out.println(customer);
        tx.commit();
        em.close();
    }

修改

先根据id查询一个对象,再更新:

@Test
public void testUpdate() {
    EntityManager em = JPAUtil.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();

    //先查询
    Customer customer = em.find(Customer.class, 1L);
    //修改对象
    customer.setCustAddress("航头");


    tx.commit();//事务提交时,自动更新
    em.close();
}

也可以先new一个对象,给对象指定id,指定新的属性值,再调用meger方法更新这个对象:

@Test
public void testUpdate2() {
    EntityManager em = JPAUtil.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();

    Customer customer = new Customer();
    customer.setCustId(1L);
    customer.setCustName("程序员");
    customer.setCustAddress("江苏");

    em.merge(customer);//更新对象

    tx.commit();
    em.close();
}

删除

不能直接new一个对象,然后删除。

@Test
    public void testDelete() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //先查询
        Customer customer = em.find(Customer.class, 1L);
        //再删除
        em.remove(customer);

        tx.commit();
        em.close();
    }

JPA中的复杂查询

JPQL全称Java Persistence Query Language

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

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

查询全部

 @Test
    public void findAll() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //创建查询对象,写的是JPQL语句  Customer 类名
        Query query = em.createQuery("from Customer");
        List<Customer> list = query.getResultList();
        for (Customer customer : list) {
            System.out.println(customer);
        }
        tx.commit();
        em.close();
    }

分页查询

@Test
    public void findPage() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //创建查询对象,写的是JPQL语句
        Query query = em.createQuery("from Customer");
        //开始
        query.setFirstResult(0);
        //查几个
        query.setMaxResults(2);
        List<Customer> list = query.getResultList();
        for (Customer customer : list) {
            System.out.println(customer);
        }
        tx.commit();
        em.close();
    }

条件查询

@Test
    public void findLike() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //创建查询对象,写的是JPQL语句 Customer 类名 custName 类中的属性名
        Query query = em.createQuery("from Customer where custName like ?");
        //给占位符设置值
        query.setParameter(1,"%测试%");
        List<Customer> list = query.getResultList();
        for (Customer customer : list) {
            System.out.println(customer);
        }

        tx.commit();
        em.close();
    }

排序查询

@Test
    public void findOrder() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //创建查询对象,写的是JPQL语句
        Query query = em.createQuery("from Customer order by custId desc");
        List<Customer> list = query.getResultList();
        for (Customer customer : list) {
            System.out.println(customer);
        }

        tx.commit();
        em.close();
    }

统计查询

@Test
    public void findCount() {
        EntityManager em = JPAUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //创建查询对象,写的是JPQL语句
        Query query = em.createQuery("select count(*) from Customer");
        Long total = (Long) query.getSingleResult();
        System.out.println(total);

        tx.commit();
        em.close();
    }

猜你喜欢

转载自blog.csdn.net/adminBfl/article/details/86596350