hibernate的入門crud

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.