一、创建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(); }