在實現增刪該查之前准備工作 和入門一樣
在測試類中:
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語句中的表明變為實體類類名
字段名改為實體類屬性名