在实现增删该查之前准备工作 和入门一样
在测试类中:
1 package cn.yqk.jpa; 2 3 import cn.yqk.pojo.Customer; 4 import org.junit.Before; 5 import org.junit.Test; 6 7 import javax.persistence.*; 8 import java.util.List; 9 10 /** 11 * @author Yang 12 * @date 2019/8/15 13:58 13 */ 14 public class JpaManager { 15 private EntityManagerFactory entityManagerFactory; 16 private EntityManager entityManager; 17 EntityTransaction transaction; 18 @Before //表示在优先执行 19 public void init(){//初始化方法 20 //创建EntityManagerFactory工厂 21 entityManagerFactory = 22 Persistence.createEntityManagerFactory("myjpa"); 23 //根据factory工厂对象获Entity对象 24 entityManager = entityManagerFactory.createEntityManager(); 25 transaction = entityManager.getTransaction(); 26 } 27 //添加 28 @Test 29 public void addCustomer() { 30 //开启事务 31 transaction.begin(); 32 for (int i = 0; i < 20; i++) { 33 Customer customer = new Customer(); 34 customer.setCstName("张" + i); 35 customer.setCstAddress("豫" + i); 36 customer.setCstIndustry("测试"); 37 customer.setCstLevel("VIP" + i); 38 customer.setCstSource("00" + i); 39 entityManager.persist(customer); 40 } 41 //提交事务 42 transaction.commit(); 43 //关闭释放资源 44 entityManager.close(); 45 entityManagerFactory.close(); 46 47 } 48 //删除数据 49 @Test 50 public void delCustomer() { 51 //开启事务 52 transaction.begin(); 53 //删除数据之前要先查询数据 54 //查询数据 55 Customer customer = entityManager.find(Customer.class, 20l); 56 //删除该数据 57 entityManager.remove(customer); 58 //提交事务 59 transaction.commit(); 60 //关闭 61 entityManager.close(); 62 entityManagerFactory.close(); 63 } 64 65 //修改数据 66 @Test 67 public void update() { 68 //开启事务 69 transaction.begin(); 70 //修改数据之前也熬先查询一条customer信息 71 Customer customer = entityManager.find(Customer.class, 19l); 72 customer.setPhone("1111111"); 73 customer.setCstSource("测试"); 74 customer.setCstIndustry("aaa"); 75 customer.setCstAddress("asd"); 76 customer.setCstName("张憨憨"); 77 //修改方法merge 78 entityManager.merge(customer); 79 //提交事务 80 transaction.commit(); 81 //关闭连接 82 entityManager.close(); 83 entityManagerFactory.close(); 84 } 85 86 //根据id查询(find方法) 即时加载 87 @Test 88 public void findById() { 89 Customer customer = entityManager.find(Customer.class, 19l); 90 System.out.println("============================"); 91 //打印结果 92 System.out.println(customer); 93 //关闭连接 94 entityManager.close(); 95 entityManagerFactory.close(); 96 } 97 98 //根据id查询(getReference) 延时加载 当访问对象时加载 99 @Test 100 public void findById0() { 101 Customer reference = entityManager.getReference(Customer.class, 18l); 102 System.out.println(reference); 103 entityManager.close(); 104 entityManagerFactory.close(); 105 } 106 107 //JPQL查询 相当于sql语句中的一个变种 108 //查询全部 109 @Test 110 public void findAll() { 111 //使用EntityManager创建Query对象 112 Query query = entityManager.createQuery("from Customer"); 113 //使用query对象执行查询 114 List<Customer> resultList = query.getResultList(); 115 for (Customer customer : resultList) { 116 System.out.println(customer); 117 } 118 entityManager.close(); 119 entityManagerFactory.close(); 120 } 121 122 //分页查询 123 @Test 124 public void findByPage() { 125 //创建query对象 126 Query query = entityManager.createQuery("from Customer"); 127 //设置分页信息 128 // query.setFirstResult(0);//表示从第几个开始 129 // query.setMaxResults(5);//表示每页显示的数据 130 // List<Customer> resultList = query.getResultList(); 131 // for(Customer customer:resultList){ 132 // System.out.println(customer); 133 // } 134 for (int i = 0; i < 20; i += 5) { 135 System.out.println(i == 0); 136 query.setFirstResult(i); 137 query.setMaxResults(5); 138 List<Customer> resultList = query.getResultList(); 139 for (Customer customer : resultList) { 140 System.out.println(customer); 141 } 142 System.out.println("======================="); 143 } 144 entityManager.close(); 145 } 146 147 //带条件查询 148 //根据id查询 149 @Test 150 public void findById2() { 151 Query query = entityManager.createQuery("from Customer where cstId=?1"); 152 //设置条件 153 //表示给编号为1的参数设值 编号可以为0或任意正整数但必须与?后面的值保持一致 并且?与后面的数值中间不能用空格 154 query.setParameter(1, 9l); 155 Customer customer = (Customer) query.getSingleResult(); 156 System.out.println(customer); 157 entityManager.close(); 158 } 159 160 //模糊查询 161 @Test 162 public void findM() { 163 Query query = entityManager.createQuery("from Customer where cstName like ?1 and cstAddress like ?2"); 164 //设置参数 165 query.setParameter(1, "%张%"); 166 query.setParameter(2, "%豫%"); 167 List<Customer> resultList = query.getResultList(); 168 for (Customer customer : resultList) { 169 System.out.println(customer); 170 } 171 entityManager.close(); 172 } 173 //排序 174 @Test 175 public void findAllByOrder(){ 176 //desc 倒序 177 Query query = entityManager.createQuery("from Customer order by cstId desc"); 178 List<Customer> resultList = query.getResultList(); 179 for (Customer customer:resultList){ 180 System.out.println(customer); 181 } 182 entityManager.close(); 183 } 184 //聚合函数 185 @Test 186 public void findAllCount(){ 187 // Query query = entityManager.createQuery("select count(*) from Customer"); 188 Query query = entityManager.createQuery("select sum(cstId) from Customer"); 189 Object count = query.getSingleResult(); 190 System.out.println(count); 191 entityManager.close(); 192 } 193 }
总结:
1.入门程序 引入依赖 编写配置文件 编写实体类 测试代码
2.测试方法
添加 persist 删除 remove (需要注意的是使用remove时要先查询) 修改 merge 查询 find(即时加载) getReference(延时加载 在访问对象时加载)
3.JPQL
把sql语句中的表明变为实体类类名
字段名改为实体类属性名