標籤:uil 部分 讀取 映射 let rollback log XML nts
package com.test;import com.demo.User;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import java.util.Arrays;import java.util.List;/* * 沒有借住HibernateUtil小工具 */public class crudTest { private static SessionFactory sessionFactory; // 工廠只有一個 根據設定檔來產生的 static { Configuration cfg = new Configuration(); // cfg.configure();//預設自動設定src下的hibernate.cfg.xml // cfg.addResource("com/demo/user.hbm.xml");//增加一個對應檔 在配置裡面已經配置過了) // cfg.addClass(User.class);//去user類所在的包中尋找名稱為User,尾碼為.hbm.xml的檔案 cfg.configure("hibernate.cfg.xml");// 讀取指定的主設定檔(位置也可不需指定,預設自動尋找src下的cfg.xml) sessionFactory = cfg.buildSessionFactory(); // 產生session工廠 } @Test public void testSave() throws Exception { User u = new User(); u.setName("bb"); u.setPassword("1563"); u.setType("root"); Session ses = sessionFactory.openSession(); // 開啟一個新的session Transaction ts = ses.beginTransaction(); // 開始事務---- 建立事務的對象ts try { ses.save(u);// 往表user1存資料 ts.commit();// 提交事務 } catch (HibernateException he) { he.printStackTrace(); System.out.println("死了"); ts.rollback();//事務的復原 } finally { ses.close(); sessionFactory.close(); System.out.println("插入成功"); } } @Test public void testGet() throws Exception { Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = (User) session.get(User.class, 4);// 擷取User表中的欄位1 System.out.println(user);// toString方法已經重寫 [User:id=1,name=hoobey,password=456,type=admin] tx.commit(); session.close(); } @Test public void testHQL() { Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); String hql = null; // 執行查詢 // 1.簡單的查詢 /* hql = "FROM User"; */ // 2.帶上過濾條件以及排序from User as u --使用別名 as可以省略 /* hql="from User u where u.id = 1"; */ // 3.指定select子句 hql = "select u.id , u.name from User u";//查詢多個指定的列時 返回的是數組 輸出使用Array.toString() List list = session.createQuery(hql).list(); for(Object obj : list){ if(obj.getClass().isArray()){ System.out.println(Arrays.toString((Object[])obj));//查詢返回的數組時 }else{ System.out.println(obj);//查詢返回的是原屬性的類型時 直接輸出 } } } // ---------------第二部分的學習----------------------------- // 1,聚集合函式:count(), max(), min(), avg(), sum()// hql = "SELECT COUNT(*) FROM User"; // 返回的結果是Long型的 // hql = "SELECT min(id) FROM Employee"; // 返回的結果是id屬性的類型// Number result = (Number) session.createQuery(hql).uniqueResult();// System.out.println(result.getClass());// System.out.println(result); // 2,分組: Group By ... Having // hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name"; // hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1"; // hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1"; // --- // hql = "SELECT e.name,COUNT(e.id) " + // // "FROM Employee e " + // // "WHERE id<9 " + // // "GROUP BY e.name " + // // "HAVING count(e.id)>1 " + // // "ORDER BY count(e.id) ASC"; // --- // hql = "SELECT e.name,COUNT(e.id) AS c " + // // "FROM Employee e " + // // "WHERE id<9 " + // // "GROUP BY e.name " + // // "HAVING count(e.id)>1 " + // 在having子句中不能使用列別名 // "ORDER BY c ASC"; // 在orderby子句中可以使用列別名 // 3,串連查詢 / HQL是物件導向的查詢 // >> 內串連(inner關鍵字可以省略) // hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d"; // hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d"; // >> 左外串連(outer關鍵字可以省略) // hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d"; // >> 右外串連(outer關鍵字可以省略) // hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d"; // 可以使用更方便的方法 // hql = "SELECT e.id,e.name,e.department.name FROM Employee e"; // 4,查詢時使用參數 // >> 方式一:使用‘?‘佔位 // hql = "FROM Employee e WHERE id BETWEEN ? AND ?"; // List list = session.createQuery(hql)// // .setParameter(0, 5)// 設定參數,第1個參數的索引為0。 // .setParameter(1, 15)// // .list(); // >> 方式二:使用變數名 // hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax"; // List list = session.createQuery(hql)// // .setParameter("idMax", 15)// // .setParameter("idMin", 5)// // .list(); // 當參數是集合時,一定要使用setParameterList()設定參數值 // hql = "FROM Employee e WHERE id IN (:ids)"; // List list = session.createQuery(hql)// // .setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })// // .list(); // 5,使用命名查詢 // Query query = session.getNamedQuery("queryByIdRange"); // query.setParameter("idMin", 3); // query.setParameter("idMax", 10); // List list = query.list(); // 6,update與delete,不會通知Session緩衝 // >> Update// int result = session.createQuery(//// "UPDATE User e SET e.name=? WHERE user_id = 2")//// .setParameter(0, "hghg")//// .executeUpdate(); // 返回int型的結果,表示影響了多少行。// System.out.println("result = " + result); // User user = (User)session.get(User.class, 1);// System.out.println(user.getName()); // >> Delete /* * int result = session.createQuery(// "DELETE FROM Employee e WHERE id>15")// .executeUpdate(); // 返回int型的結果,表示影響了多少行。 System.out.println("result = " + result); */ // ----- 執行查詢並顯示結果 // // List list = session.createQuery(hql).list(); // for (Object obj : list) { // if (obj.getClass().isArray()) { // System.out.println(Arrays.toString((Object[]) obj)); // } else { // System.out.println(obj); // } // } tx.commit(); session.close(); }}
hibernate的入門crud