Hibernate 學習總結

一:hibernate(是一個開源的輕量級(就是不需要依賴其他就可以運行)框架)是應用在dao層(持久化層)的一個框架,是對數據庫的crud操作(就是增刪改查操作),就是對jdbc進行的封裝,不在寫複雜的SQL語句,只需要在配置文件中配置即可。

二:MVC思想 就是(M:模型    V:視圖    C:控制器)

三:hibernate使用的是ORM思想對數據庫進行crud操作

        ORM(object relational mapping)對象關係映射

        就是實體類和數據庫的表一一對應(所以不需要操作數據庫表,而是操作實體類對象即可),看下圖即可

        


四:hibernate入門案例

    4.1:入門案例的步驟:

            4.1.1 導包  ..............    

           4.1.2  創建實體類(注: 使用hibernate不需要手動創建表,hibernate會幫把表創建,但是必須得配置纔可以)

                

        4.1.3:配置映射配置文件:

                配置實體類和數據庫表的一一對應關係(映射關係)————使用xml配置

                xml文件的位置和名稱沒有固定要求(個人建議和實體類放一起,名字隨意)

                引入dtd的約束

                配置映射關係:

                            

           4.1.4: 配置hibernate的核心配置文件

            引入約束

            位置:在src下面;

            名稱:如果單獨使用hibernate時候,名稱固定  是hibernate.cfg.xml(我們這裏使用這個)

                        如果和spring一起使用的時候,名稱就不固定

            核心配置文件中: 

                            第一部分:需要配置數據庫的信息

                                

                            第二部分:配置hibernate的信息(可選)(上面說hibernate會自動生成表,必須得配置這句話)

                            


                        第三部分:配置映射文件(映入映射文件)

                        

               4.1.5  測試demo

                     

五:hibernate的實體類的編寫規則

        5.1:屬性私有,生成get,set方法

        5.2 :要求實體類中有一個屬性作爲唯一值

        5.3  :類型建議使用包裝類型

                    int——Integer        char——Charracter  其它都是首字母大寫就可以

        5.4:主鍵生成的策略(方式)

                    5.4.1:native:就是一般的那種..........

                    5.4.2:uuid:這裏不做解釋.......


六:實現crud操作

        6.1:添加:

        

         6.2:根據id查詢

        

         6.3:  修改:

            

            6.4:刪除:

            



    七:hibernate的實體類對象的狀態

            6.1:瞬時態:對象裏面沒有id值,對象與session沒有關聯

                      就是在程序中有數據,而在數據庫中沒有數據,並且數據連接斷開

            6.2:持久態:對象裏有id值,對象與session沒有關聯

                    就是在程序中和數據庫中都有數據,並且數據連接沒有持續連接中。

            6.3:託管態:對象裏面有id值,對象與session沒有關聯

                    就是在在持久態的時候,數據庫的連接斷開,所有程序中的數據都成爲遊離態



八:hibernate的一級緩存:(hibernate的緩存是一個優化的方式)

        8.1:hibernate的一級緩存默認是打開的

        8.2:作用範圍:是session範圍,session的創建到死亡

        8.3:一級緩存存儲的數據   必須是持久態


九:hibernate的一對多操作(重要)

        9.1 :創建兩個實體類:例如  客戶和聯繫人

        9.2: 讓兩個實體類之間互相表示

                  9.2.1: 在客戶裏表示多個聯繫人(使用set集合)並且生成get,set方法

                

                9.2.2:在聯繫人中表示客戶

        

        9.3:配置映射關係

               完成基本的配置的時候。在配置一對多的關係

                9.3.1:在客戶映射文件中:表示所有聯繫人

                        

                9.3.2:在聯繫人的映射文件中,表示所屬客戶

                

             9.4:創建核心配置配件

                引入映射配置文件....

                

    十:測試一對多demo

                    這樣寫的時候:需要一個在多的一方中配置一下


                

其他操作略去..................

十一:多對多操作

        11.1:創建兩個實體類

        11.2:兩個類互相表示(都用set集合表示)

         11.3:  在映射配置文件中互相表示(以角色和用戶來舉例)

                



        11.4:在覈心配置文件中引入映射文件

            

十二:多對多級聯保存

        12.1:根據用戶保存角色

            12.1.1:在用戶的映射文件中set標籤中進行配置

            

            12.1.2:寫代碼

                創建用戶和角色對象,把角色放到用戶裏面,最終保存用戶就可以了

                        

//演示多對多修級聯保存

    @Test

    publicvoid testSave() {

       SessionFactory sessionFactory = null;

       Session session = null;

       Transaction tx = null;

        try {

           //得到sessionFactory

           sessionFactory = HibernateUtils.getSessionFactory();

           //得到session

           session = sessionFactory.openSession();

           //開啓事務

           tx = session.beginTransaction();

          

           //添加兩個用戶,爲每個用戶添加兩個角色

           //1 創建對象

           User user1 = new User();

           user1.setUser_name("lucy");

           user1.setUser_password("123");

          

           User user2 = new User();

           user2.setUser_name("mary");

           user2.setUser_password("456");

          

           Role r1 = new Role();

           r1.setRole_name("總經理");

           r1.setRole_memo("總經理");

          

           Role r2 = new Role();

           r2.setRole_name("祕書");

           r2.setRole_memo("祕書");

          

           Role r3 = new Role();

           r3.setRole_name("保安");

           r3.setRole_memo("保安");

          

           //2 建立關係把角色放到用戶裏面

           // user1 --r1/r2

           user1.getSetRole().add(r1);

           user1.getSetRole().add(r2);

          

           // user2-- r2/r3

           user2.getSetRole().add(r2);

           user2.getSetRole().add(r3);

          

           //3 保存用戶

           session.save(user1);

           session.save(user2);

          

           //提交事務

           tx.commit();

 

       }catch(Exception e) {

           tx.rollback();

       }finally {

           session.close();

           //sessionFactory不需要關閉

           sessionFactory.close();

       }

    }


其他操作略去................

十三:hibernate的查詢方式

        13.1:對象導航擦查詢

                查詢某個客戶裏面所有聯繫人過程,使用對象導航實現



        13.2:oid查詢

        

        13.3:hql查詢:

        

    



        13.4:QBC查詢

              













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章