Hibernate第二篇【API講解、執行流程圖】

前言

從上一篇中已經大體介紹了Hibernate而且有了一個快速入門案例的基礎了,….本博文主要講解Hibernate APIphp

咱們看看快速入門案例的代碼用到了什麼對象吧,而後一個一個講解java

public static void main(String[] args) {

        //建立對象
        User user = new User();
        user.setPassword("123");
        user.setCellphone("122222");
        user.setUsername("nihao");

        //獲取加載配置管理類
        Configuration configuration = new Configuration();

        //不給參數就默認加載hibernate.cfg.xml文件,
        configuration.configure();

        //建立Session工廠對象
        SessionFactory factory = configuration.buildSessionFactory();

        //獲得Session對象
        Session session = factory.openSession();

        //使用Hibernate操做數據庫,都要開啓事務,獲得事務對象
        Transaction transaction = session.getTransaction();

        //開啓事務
        transaction.begin();

        //把對象添加到數據庫中
        session.save(user);

        //提交事務
        transaction.commit();

        //關閉Session
        session.close();
    }

Configuration

配置管理類:主要管理配置文件的一個類sql

擁有一個子類AnnotationConfiguration,也就是說:咱們可使用註解來代替XML配置文件來配置相對應的信息數據庫

這裏寫圖片描述

configure方法

configure()方法用於加載配置文件markdown

  • 加載主配置文件的方法
    • 若是指定參數,那麼加載參數的路徑配置文件
    • 若是不指定參數,默認加載src/目錄下的hibernate.cfg.xml

buildSessionFactory方法

buildSessionFactory()用於建立Session工廠session


SessionFactory

SessionFactory–>Session的工廠,也能夠說表明了hibernate.cfg.xml這個文件…hibernate.cfg.xml的就有<session-factory>這麼一個節點ui

openSession方法

建立一個Session對象spa

getCurrentSession方法

建立Session對象或取出Session對象hibernate


Session

Session是Hibernate最重要的對象,Session維護了一個鏈接(Connection),只要使用Hibernate操做數據庫,都須要用到Session對象code

一般咱們在DAO層中都會有如下的方法,Session也爲咱們提供了對應的方法來實現

public interface IEmployeeDao {

    void save(Employee emp);
    void update(Employee emp);
    Employee findById(Serializable id);
    List<Employee> getAll();
    List<Employee> getAll(String employeeName);
    List<Employee> getAll(int index, int count);
    void delete(Serializable id);

}

更新操做

咱們在快速入門中使用到了save(Objcet o)方法,調用了這個方法就把對象保存在數據庫之中了。Session對象還提供着其餘的方法來進行對數據庫的更新

  • session.save(obj); 【保存一個對象】
  • session.update(obj); 【更新一個對象】
  • session.saveOrUpdate(obj); 【保存或者更新的方法】
    • 沒有設置主鍵,執行保存;
    • 有設置主鍵,執行更新操做;
    • 若是設置主鍵不存在報錯!

咱們來使用一下update()方法吧….既然是更新操做了,那麼確定須要設置主鍵的,不設置主鍵,數據庫怎麼知道你要更新什麼。將id爲1的記錄修改爲以下:

user.setId(1);
        user.setPassword("qwer");
        user.setCellphone("1111");
        user.setUsername("zhongfucheng");

這裏寫圖片描述


主鍵查詢

經過主鍵來查詢數據庫的記錄,從而返回一個JavaBean對象

  • session.get(javaBean.class, int id); 【傳入對應的class和id就能夠查詢】
  • session.load(javaBean.class, int id); 【支持懶加載】

User重寫toString()來看一下效果:

User user1 = (User) session.get(User.class, 1);
        System.out.println(user1);

這裏寫圖片描述


HQL查詢

HQL:hibernate query language 即hibernate提供的面向對象的查詢語言

  • 查詢的是對象以及對象的屬性【它查詢的是對象以及屬性,所以是區分大小寫的!】

SQL:Struct query language 結構化查詢語言

  • 查詢的是表以及列【不區分大小寫】

HQL是面向對象的查詢語言,能夠用來查詢所有的數據!

Query query = session.createQuery("FROM User");

        List list = query.list();
        System.out.println(list);

這裏寫圖片描述

固然啦,它也能夠傳遞參數進去查詢

Query query = session.createQuery("FROM User WHERE id=?");

        //這裏的?號是從0開始的,並不像JDBC從1開始的!
        query.setParameter(0, user.getId());

        List list = query.list();
        System.out.println(list);

這裏寫圖片描述


QBC查詢

QBC查詢: query by criteria 徹底面向對象的查詢

從上面的HQL查詢,咱們就能夠發現:HQL查詢是須要SQL的基礎的,由於仍是要寫少部分的SQL代碼….QBC查詢就是徹底的面向對象查詢…可是呢,咱們用得比較少

咱們來看一下怎麼使用吧:

//建立關於user對象的criteria對象
        Criteria criteria = session.createCriteria(User.class);

        //添加條件
        criteria.add(Restrictions.eq("id", 1));

        //查詢所有數據
        List list = criteria.list();
        System.out.println(list);

這裏寫圖片描述


本地SQL查詢

有的時候,若是SQL是很是複雜的,咱們不能靠HQL查詢來實現功能的話,咱們就須要使用原生的SQL來進行復雜查詢了!

可是呢,它有一個缺陷:它是不能跨平臺的…所以咱們在主配置文件中已經配置了數據庫的「方言「了。

咱們來簡單使用一下把:

//將全部的記錄封裝成User對象存進List集合中
        SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM user").addEntity(User.class);

        List list = sqlQuery.list();

        System.out.println(list);

這裏寫圖片描述

beginTransaction方法

開啓事務,返回的是一個事務對象….Hibernate規定全部的數據庫操做都必須在事務環境下進行,不然報錯!


Hibernate執行流程圖

這裏寫圖片描述

相關文章
相關標籤/搜索