一、创建Maven工程

二、实现增删改查

  创建工具类



package cn.kgc.utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Jpautil {
    private static EntityManagerFactory factory;
    static {
        //根据Persistence创建 EntityManagerFactory对象
        factory = Persistence.createEntityManagerFactory("myjpa");
    }

    //获得EntityManager对象的方法
    public static EntityManager getEntityManager(){
        EntityManager entityManager = factory.createEntityManager();
        return entityManager;
    }
}



 

1、添加数据

persist()方法用于添加一条数据



//添加数据
    @Test
    public void firstTest() {

        //通过工具类获得EntityTransaction对象
        EntityManager entityManager = Jpautil.getEntityManager();
        //获得事物对象
        EntityTransaction transaction = entityManager.getTransaction();
        //开启事物
        transaction.begin();
        //创建实体类对象,添加10条信息
        for (int i=0;i<10;i++){
            Customer customer = new Customer();
            customer.setName("刘高阳");
            customer.setSex("男");
            customer.setAge(18);
            customer.setAddres("郑州市");
            //5 使用Entitymanager 对象  的persist 方法向数据库添加数据
            entityManager.persist(customer);
        }
        //提交事物
        transaction.commit();
        //关闭连接
        entityManager.close();
//        factory.close();

    }



 

2、根据id查询数据

  find方法

  getReference()方法



//根据id查询数据
    //    使用find方法查询数据库
    //        特点:
    //            1、查询的对象就是当前对象本身本身
    //            2、在调用find方法时就会发送sql语句
    //该方式称为立即加载
    @Test
    public void testFind(){
        //获得entityManager对象该对象是操作数据库的核心对象
        EntityManager entityManager = Jpautil.getEntityManager();
        //获得entityTransaction事物对象
        EntityTransaction entityTransaction = entityManager.getTransaction();
        //开启事物
        entityTransaction.begin();
        //执行根据id查询的方法
        Customer customer = entityManager.find(Customer.class, 3);
        System.out.println(customer);
        //提交事物
        entityTransaction.commit();
        //关闭核心类,释放资源
        entityManager.close();
    }

//根据id查询数据
    //    使用getReference方法
    //        特点:
    //            1、该方法查询的是一个动态代理对象
    //            2、当执行Reference方法时不会立即打印sql语句查询数据库,而是调用查询对象时才会调用sql语句,
    //    即什么时候用什么时候发送sql语句查询数据库
    //该方式成为延迟加载或懒加载
    @Test
    public void testReference(){
        //获得entityManager对象该对象是操作数据库的核心对象
        EntityManager entityManager = Jpautil.getEntityManager();
        //获得entityTransaction事物对象
        EntityTransaction entityTransaction = entityManager.getTransaction();
        //开启事物
        entityTransaction.begin();
        //执行根据id查询的方法
        Customer customer = entityManager.getReference(Customer.class, 1);
        System.out.println(customer);
        //提交事物
        entityTransaction.commit();
        //关闭核心类,释放资源
        entityManager.close();
    }



3、修改数据的方法

  merge()方法  用于修改数据后保存数据库



//修改数据merge()是保存修改后的数据
    @Test
    public void testmerge() {
        //获得entityManager对象该对象是操作数据库的核心对象
        EntityManager entityManager = Jpautil.getEntityManager();
        //获得entityTransaction事物对象
        EntityTransaction entityTransaction = entityManager.getTransaction();
        //开启事物
        entityTransaction.begin();
        //执行根据id查询的方法
        Customer customer = entityManager.getReference(Customer.class, 2);
        customer.setName("曹操");
        entityManager.merge(customer);
        System.out.println(customer);
        //提交事物
        entityTransaction.commit();
        //关闭核心类,释放资源
        entityManager.close();
    }



 

4、删除数据

  remove()方法用于删除数据库数据



//删除数据案例
    @Test
    public void testRemove() {
        //获得entityManager对象该对象是操作数据库的核心对象
        EntityManager entityManager = Jpautil.getEntityManager();
        //获得entityTransaction事物对象
        EntityTransaction entityTransaction = entityManager.getTransaction();
        //开启事物
        entityTransaction.begin();
        //执行根据id查询的方法
        Customer customer1 = entityManager.find(Customer.class, 3);
        //执行删除操作
        entityManager.remove(customer1);
        System.out.println(customer1);
        //提交事物
        entityTransaction.commit();
        //关闭核心类,释放资源
        entityManager.close();
    }



 

5、基于jpql 查询所有



//查询所有  基于jpql 创建
@Test
public void findAll(){
    //获得entityManager对象
    EntityManager entityManager = Jpautil.getEntityManager();
    //  根据entityManager获得Query对象 基于jpql 创建
    //sql语句:"select * from Customer" 这里的Customer指的是表
    //jpql语句:"from Customer"的意思是查询实体类Customer的所有数据,这里的Customer值得是实体类
    Query query = entityManager.createQuery("from Customer");
    //getResultList()方法:该方法是Query对象的方法 ,返回查询的数据的集合对象
    List<Customer> resultList = query.getResultList();
    for (Customer customer:resultList) {
        System.out.println(customer);
    }
    //关闭连接
    entityManager.close();

}



 

6、基于jpql的分页查询

setFirstResult()表示从第几条开始查询

setMaxResults()表示每页展示的条数



//设置分页信息
@Test
public void fianAllWithPage(){
    //创建entityManager
    EntityManager entityManager = Jpautil.getEntityManager();
    //获得query对象
    //"from Customer"的意思是查询实体类Customer的所有数据,这里的Customer值得是实体类
    Query query = entityManager.createQuery("from Customer");
    //设置分页信息
    query.setFirstResult(5);//表示从第几条开始查询
   query.setMaxResults(10);//表示每页展示的条数
   //获得查询所有的数据,返回list集合
    List<Customer> resultList = query.getResultList();
    for (Customer customer:resultList) {
        System.out.println(customer);
    }
}



 

7、基于jpql 根据id查询



//  jpql按id 查
@Test
public void findJpqlid(){
    EntityManager entityManager = Jpautil.getEntityManager();
    //获得query对象
    //"from Customer where id=?"表示根据id查询Customer 的对象

    Query query = entityManager.createQuery("from Customer where id=?");
    //设置占位符的值。第一个参数为占位符的位置,第二个参数为占位符的值
    query.setParameter(1,1);
    //执行查询
    Customer custome =(Customer) query.getSingleResult();
    System.out.println(custome);
    //关闭资源
    entityManager.close();

}



 

8、基于jpql的模糊查询



//jpql模糊查询
@Test
public void findJpqlByName(){
    EntityManager entityManager = Jpautil.getEntityManager();
    //"from Customer where name like ? and sex like ?" 意思是根据名字和性别进行模糊查询
    Query query = entityManager.createQuery("from Customer where name like ? and sex like ?");
    //设置参数  第一个参数为占位符的位置,第二个参数为占位符的值
    query.setParameter(1,"%曹%");
    query.setParameter(2,"%男%");
    //执行查询
    List<Customer> resultList = query.getResultList();
    System.out.println(resultList);
    //关闭资源
    entityManager.close();
}



 

9、基于jpql的升降序查询



@Test
public void findAllByOrder(){
    EntityManager entityManager = Jpautil.getEntityManager();
    Query query = entityManager.createQuery("from Customer order by id desc");//desc表示降序查询,
//  Query query = entityManager.createQuery("from Customer order by id asc");//asc表示升序查询
//getResultList()方法返回查询的所有数据的list集合对象
    List<Customer> resultList = query.getResultList();
    for (Customer customer:resultList) {
        System.out.println(customer);
    }
    entityManager.close();
}



 

10、基于jpql的聚合函数查询



//  聚合函数
@Test
public void findAllCount(){
    EntityManager entityManager = Jpautil.getEntityManager();
    Query query = entityManager.createQuery("select count(*) from Customer");//查询表Customer某列有多少条信息
    //该方法表示统计信息数量
    Object customer= query.getSingleResult();
    System.out.println(customer);
    entityManager.close();
}