Java:hibernate框架 (2)

一. 實體類的編寫規則

1.實體類里面的屬性都是私有的

2. 私有屬性使用公開的set和get方法操作

3.要求實體類有屬性作為唯一值

4.實體類屬性建議不使用基本數據類型,使用基本數據類型對應的包裝類

二. Hibernate主鍵生成策略 : 1. native (主要使用的) 2. uuid 3. 等等

<hibernate-mapping>
    <class name="com.company.User" table="user">
        <id name="uid" column="did">
            <!--設置數據表id增長策略-->
/*
  *  class 屬性:  1. native 是主鍵自增長
                           2. uuid 是生成唯一的uuid值
  */
            <generator class="native"></generator>
        </id>
    </class>
</hibernate-mapping>

注:  使用native值時, 實體類中的uid屬性是 int 型
     使用uuid時, 實體類中的uid屬性必須是String型

三.實體類操作

  1. 添加操作: 調用session里面的save方法實現;
public void AddTest(){
    SessionFactory sessionFactory =null;
    Session session = null;
    Transaction tx = null;
    try {
        // 加載配置文件
        Configuration cfg = new Configuration();
        cfg.configure();
        // 創建SessionFactory對象
        sessionFactory = cfg.buildSessionFactory();
        // 創建Session對象
        session = sessionFactory.openSession();
                tx = session.beginTransaction();  //開啟事務

                // 添加操作
                User user = new User();
                user.setUsername("xiaoMing");
                user.setPassword("123456");
                user.setAddress("塔上小學");
                session.save(user);  //添加數據的方法

                tx.commit();  // 關閉事務
              
            }catch (Exception e){
                //出現異常的話,做回滾操作 
                tx.rollback();
                    }finally {
                session.close();  
                sessionFactory.close(); 
           }
        }
  1. 根據id做查詢操作: 調用session的get方法;
public void SearchTest(){
    SessionFactory sessionFactory =null;
    Session session = null;
    Transaction tx = null;
    try {
        Configuration cfg = new Configuration();
        cfg.configure();
        sessionFactory = cfg.buildSessionFactory();
        session = sessionFactory.openSession();
        tx = session.beginTransaction();  //開啟事務
       /**
         * 查詢操作
         *
         * 使用get方法做查詢操作: 參數1: 實體類的Class  參數2: id值
         */
        session.get(User.class,1);
        tx.commit();
        session.close();
        sessionFactory.close();
    }catch (Exception e){
        //出現異常的話,做回滾操作
        tx.rollback();
    }finally {
        session.close();
        sessionFactory.close();
    }
}

3.修改操作: 先查詢,再修改值;

public void UpdateTest(){
    SessionFactory sessionFactory =null;
    Session session = null;
    Transaction tx = null;
    try {
        Configuration cfg = new Configuration();
        cfg.configure();
        sessionFactory = cfg.buildSessionFactory();
        session = sessionFactory.openSession();
        tx = session.beginTransaction();  //開啟事務
      /**
       * 修改操作
       *
       * 使用update方法做查詢操作
       */
        User user = session.get(User.class,1);  //查詢
        user.setPassword("xiaoHong"); //使用set方法修改
        session.update(user);  // 更新數據
                                                          
        tx.commit();
        session.close();
        sessionFactory.close();
    }catch (Exception e){
        //出現異常的話,做回滾操作
        tx.rollback();
    }finally {
        session.close();
        sessionFactory.close();
    }
}
  1. 刪除操作: 先查詢再刪除
public void DeleteTest(){
    SessionFactory sessionFactory =null;
    Session session = null;
    Transaction tx = null;
    try {
        Configuration cfg = new Configuration();
        cfg.configure();
        sessionFactory = cfg.buildSessionFactory();
        session = sessionFactory.openSession();
        tx = session.beginTransaction();  //開啟事務
      /**
       * 修改操作
       *
       * 使用update方法做查詢操作
       */
        User user = session.get(User.class,1);  //查詢
        session.delete(user);  // 更新數據
                                                          
        tx.commit();
        session.close();
        sessionFactory.close();
    }catch (Exception e){
        //出現異常的話,做回滾操作
        tx.rollback();
    }finally {
        session.close();
        sessionFactory.close();
    }
}

四.實體類對象狀態

1. 瞬時態: 對象里面沒有id值,對象與session沒有關聯

2.持久態:  對象里面有id值,對象與session關聯

3.托管態: 對象有id值,對象與session 沒有關聯

五. Hibernate的API使用

  1. Query 對象
1.使用query對象,不需要寫sql語句,但是寫hql語句
2.區別: 使用sql操作表和表字段,使用hql操作實體類和屬性
3.查詢所有hql語句:  from 實體類名稱

實例:

//創建Query對象
Query query = session.createQuery("from User");
//調用Query對象里面的方法得到結果
List<User> list = query.list();
//遍歷Listfor (User user :
        list) {
    System.out.println(user);
}

2.Criteria 對象

1. 使用這個對象進行查詢操作時不需要寫語句,直接調方法實現
2.實現過程:  (1)創建criteria  對象
            (2) 調用對象里面的方法得到結果

實例:

//創建Criteria對象
Criteria criteria = session.createCriteria(User.class);  (此方法官方已廢棄)
 List<User> list = criteria.list();

3.SQLQuery 對象

1.使用SQLQuery對象時,調用底層sql實現

實例:

//創建SQLQuery 對象(此對象方法都已經廢棄)
 SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
 sqlQuery.addEntity(User.class);
  List<User> list = sqlQuery.list();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • hibernate(20170731) 1.導包:hibernate-distribution-3.5.6-Fin...
    瀟湘雨smile閱讀 561評論 0 0
  • 本文包括: 1、CRM 項目的整體介紹 2、Hibernate 框架概述 3、Hibernate 快速入門 4、H...
    廖少少閱讀 3,485評論 9 66
  • Hibernate: 一個持久化框架 一個ORM框架 加載:根據特定的OID,把一個對象從數據庫加載到內存中OID...
    JHMichael閱讀 1,999評論 0 27
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,766評論 18 399
  • 上一次,我們介紹了PS打造長陰影的幾種方法,詳細教程參考《PS打造長陰影》。在PPT設計中流行一種風格——扁平化,...
    流云逐月閱讀 1,627評論 0 8