• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 【學習筆記-SSH框架】Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢

    Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢

    目錄

    1. 使用Maven搭建Hibernate項目
    2. 自頂向下開發Hibernate應用步驟
    3. 封裝Hibernate工具類
    4. 實現增刪查改功能
    5. 使用Query進行HQL查詢
    6. 使用Criteria進行條件查詢
    7. POJO狀態

    1. 使用Maven搭建Hibernate項目

    在IDE中創建maven項目,加入依賴

    (這里我使用的Hibernate版本為5.4.2.Final,不同版本之間在配置hibernate的時候,方法可能有略微差別)

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>5.4.2.Final</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.47</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter</artifactId>
          <version>RELEASE</version>
          <scope>compile</scope>
        </dependency>
    

    2. 自頂向下開發Hibernate應用步驟

    1. 配置hibernate.cfg.xml:在src目錄下(IDEA創建的maven項目則在resources目錄下創建配置文件)創建配置文件hibernate.cfg.xml
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
    
            <!--配置數據庫信息-->
            <!--配置連接url: db_name 為數據庫名-->
            <property name="connection.url">jdbc:mysql://localhost:3306/數據庫名</property>
            <!--配置驅動:-->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <!--數據庫用戶名-->
            <property name="connection.username">root</property>
            <!--數據庫密碼-->
            <property name="connection.password">123456</property>
            <!--數據庫方言-->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    
            <!-- 設置數據庫創建表的策略 -->
            <property name="hbm2ddl.auto">update</property>
    
            <!--在輸出sql語句-->
            <property name="show_sql">true</property>
    
            <!--映射文件-->
            <!--兩種方式,選一種即可-->
    <!--        <mapping class="com.chapter05.pojo.User"/>-->
            <mapping resource="User.hbm.xml"/>
            
            
        </session-factory>
    </hibernate-configuration>
    
    
    1. 創建pojo類
    package com.chapter05.pojo;
    
    public class User {
        private int id;
        private String username;
        private String password;
    
        public User() {
        }
    
        public User(String username, String password) {
    
            this.username = username;
            this.password = password;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
        
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
        
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }
    
    1. 創建pojo類的映射文件Xxx.bhm.xml:在pojo類同目錄下xxx.hbm.xml映射文件(IDEA創建的maven項目則在resources目錄下創建映射文件)
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        
        <!--數據庫為course_s2sh, 數據表為t_user-->
        <class name="com.chapter05.pojo.User" table="t_user" schema="course_s2sh">
            <!--id字段-->
            <id name="id">
                <column name="id" sql-type="int(11)"/>
                <!--主鍵生成策略:自增-->
                <generator class="native"/>
            </id>
            
            <!--username字段-->
            <property name="username">
                <column name="username" sql-type="varchar(20)" length="20" not-null="true"/>
            </property>
            
            <!--password字段-->
            <property name="password">
                <column name="password" sql-type="varchar(32)" length="32" not-null="true"/>
            </property>
        </class>
    </hibernate-mapping>
    

    創建好映射文件后,需在hibernate.cfg.xml文件中加入映射

    <session-factory></session-factory>里面添加,而且要放在最后

            <!--映射文件-->
            <!--兩種方式,選一種即可-->
    <!--        <mapping class="com.chapter05.pojo.User"/>-->
            <mapping resource="User.hbm.xml"/>
    
    1. 創建Hibernate5.4.3應用步驟
    • 1.服務注冊,創建StandardServiceRegistryBuilder對象,MetadataSources對象

    • 2.創建SessionFactory對象

    • 3.打開session

    • 4.開啟事務

    • 5.持久化操作
      在這里插入圖片描述

    • 6.提交事務

    • 7.關閉

    【示例】完成一個添加用戶的功能

        /**
        * 測試添加用戶方法
        */
        @Test
        public void testAddUser(){
            User user = new User("alan", "123456");
    
            //1.服務注冊
            StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure().build();
            Metadata metadata = new MetadataSources(ssr).getMetadataBuilder()
                    .applyImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.INSTANCE).build();
    
            //2.創建SessionFactory對象
            SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
    
            //3.打開Session
            Session session = sessionFactory.openSession();
    
            //4.開啟事務
            Transaction transaction = session.beginTransaction();
    
            //5.持久化操作(添加了一個用戶)
            session.save(user);
    
            //6.提交事務
            transaction.commit();
    
            //7.關閉Session
            session.close();
    
        }
    

    3. 封裝Hibernate工具類

    通常一個應用程序只有一個SessionFactory對象的實例,并且SessionFactory對象的實例是唯一的、不可更改的。
    所以要用單例模式實現SessionFactory。

    【示例】創建HibernateUtil類

    package com.chapter05.util;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.Metadata;
    import org.hibernate.boot.MetadataSources;
    import org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl;
    import org.hibernate.boot.registry.StandardServiceRegistry;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    
    public class HibernateUtil {
        private static SessionFactory sessionFactory = null;
        private static Session session;
        
        static {
            //注冊服務
            StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure().build();
            Metadata metadata = new MetadataSources(ssr).getMetadataBuilder()
                    .applyImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.INSTANCE).build();
            sessionFactory = metadata.getSessionFactoryBuilder().build();
            //打開session
            session = sessionFactory.openSession();
        }
    
        public static Session getSession() {
            return session;
        }
    
        public static void closeSession(){
            getSession().close();
        }
    
        public static Session getCurrentSession(){
            return sessionFactory.getCurrentSession();
        }
    }
    
    

    現在可以把上面增加用戶的示例簡化了:

        /**
         * 使用HibernateUtil工具類,簡化程序
         */
        @Test
        public void testAddUser2() throws Exception {
            //獲取Session
            Session session = HibernateUtil.getSession();
            //創建User對象
            User user = new User("李四", "123");
            //開啟事務
            Transaction transaction = session.beginTransaction();
            try {
                //將對象持久化(存到數據庫)
                session.save(user);
                //提交事務
                transaction.commit();
            } catch (Exception e) {
                e.printStackTrace();
                //提交事務失敗,回滾事務
                transaction.rollback();
            }
    
            HibernateUtil.closeSession();
        }
    
    

    4. 實現增刪查改功能

    
    /**
         * 增加
         */
        @Test
        public void add(){
    //        User user = new User("alan", "123456");
            User user = new User("alan2", "123456");
    
            //3.打開Session
            Session session = HibernateUtil.getSession();
    
            //4.開啟事務
            Transaction transaction = session.beginTransaction();
    
            //5.持久化操作
            session.save(user);
    
            //6.提交事務
            transaction.commit();
    
            //7.關閉Session
            session.close();
    
        }
    
    
        /**
         * 刪除
         */
        @Test
        public void delete(){
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
    
            User user = session.get(User.class, 3);
            session.delete(user);
            System.out.println("刪除成功");
            
            transaction.commit();
            HibernateUtil.closeSession();
        }
    
    
        /**
         * 查詢
         */
        @Test
        public void query(){
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
            User user = session.get(User.class, 2);
            System.out.println("get -> user: " + user);
    
            User user2 = session.load(User.class, 2);
            System.out.println("load -> user: " + user2);
            transaction.commit();
            HibernateUtil.closeSession();
        }
    
        /**
         * 修改
         */
        @Test
        public void update(){
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
            User user = session.get(User.class, 2);
            user.setPassword("4321");
            session.update(user);
            transaction.commit();
            HibernateUtil.closeSession();
        }
    

    5. 使用Query進行HQL查詢

    使用Query進行HQL查詢的步驟:

    1. 獲取Hibernate Session對象
    2. 編寫HQL語句
    3. 以HQL語句作為參數,調用createQuery()方法創建Query對象
    4. 如果HQL語句包含參數,則調用Query的setXxx()方法為參數賦值
    5. 調用Query對象的list等方法返回查詢結果

    【示例】

        @Test
        public void testHQL(){
            Session session = HibernateUtil.getSession();
    
            Transaction transaction = session.beginTransaction();
    
            //HQL
            Query query = session.createQuery("from User");
    
            List<User> userList = query.list();
    
            for (User u : userList) {
                System.out.println("id = " + u.getId() + ", name = " + u.getUsername() + ", password = " + u.getPassword());
            }
    
            transaction.commit();
            HibernateUtil.closeSession();
        }
    

    6. 使用Criteria進行條件查詢

    更加面向對象的查詢方式Criteria查詢。

    【示例】

    /**
         * 使用Criteria查詢所有用戶信息
         */
        @Test
        public void testCriteria(){
            Session session = HibernateUtil.getSession();
            Transaction transaction = session.beginTransaction();
    
            //Criteria查詢
            Criteria criteria = session.createCriteria(User.class); //方法已過時
            //輸出結果
            List<User> userList = criteria.list();
            for (User u : userList) {
                System.out.println(u);
            }
    
            transaction.commit();
            HibernateUtil.closeSession();
        }
    
    

    7. POJO狀態

    • 瞬時狀態(Transient)
    • 持久化狀態 (Persistent)
    • 脫管狀態 (Detached)
      在這里插入圖片描述
      在這里插入圖片描述
    版權聲明:本文為qq1445654576原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq1445654576/article/details/102151263

    智能推薦

    Spring4.2整合hibernate5.0.7,進行增刪改查,以及hql查詢,sql查詢,criteria查詢

    最近學習spring data所有又復習了一下hibernate 開發環境eclipse jdk1.7 Spring4.2.0 +Hibernate5.0.7 1.創建項目,導入jar包 (其中jaxb的三個jar包和javax.activation-api.jar不是必須的,我的沒這三個包運行不了,不知道為什么,我的jdk才1.7啊) 然后右鍵add to build path 2.編寫appl...

    Hibernate框架筆記01_環境搭建_API_CRUD

    文章目錄 1. Hibernate框架的概述 1.1 什么是框架 1.2 經典三層架構 1.3 Hibernate框架 2 Hibernate入門 2.1 下載Hibernate的開發包 2.2 創建項目,引入jar包 2.3 創建表 2.4 創建實體類 2.5 創建映射(***) 2.6 創建一個Hibernate的核心配置文件(***) 1.2.7 編寫測試代碼 3 hibernate的常見配...

    (詳細)Hibernate查詢技術(Query、Session、Criteria),Hibernate的三種狀態,Hibernate集合struts2實現登錄功能(二)

    一、Hibernate的三種查詢方式(掌握) Hibernate中提供了三種查詢方式: 1)Session的查詢:按主鍵查詢查詢,方法為get或load 2)Query的查詢:使用HQL語句或SQL語句完成查詢 3)Criteria的查詢:通過方法和類中屬性的關系,來設置查詢條件,完成查詢。 Session中get和load方法的區別? 1)  如果沒有查詢到數據,get會返回null,...

    框架學習筆記之Hibernate框架基礎(二)如何建立泛型接口實現增刪改查

    本文章講述了如何用Hibernate框架創建session對象,通過實體類、object類和泛型建立通用接口,實現泛型對象的增刪改查。 映射文件中的各項元素: oracle中鍵位自增模式:increment、identity、native、assigned。   Hibernate內置的映射類型如下: integer,long,short,float,double,character,b...

    hibernate的環境搭建及簡單的增刪改查

    首先我們需要導入hibernate的jar包,在lib文件夾下有一個必須的文件夾導入里面的jar包即可 第二步創建ORM映射文件放在bean包下,和要映射的bean在一起,然后我們導入約束,我們不用死記硬背,我們可以在 該包下找到hibernate-mapping-3.0.dtd文件打開并復制其內容 然后打開window--Preferences--搜索cata 設置約束文件的查找路徑,設為本地文...

    猜你喜歡

    Hibernate學習筆記01

    建立 Hibernate 工程步驟 首先得導入 Hibernate 相關 jar 包,也可以使用 Maven 創建工程,再配置 POM.xml 1. 創建 Hibernate 配置文檔 hibernate.cfg.xml 2. 創建持久化類 規范:遵循JavaBeans規范,必須滿足 1. 公有類 2. 有無參構造方法 3. 私有的屬性變量 4. 每個屬性對應的getter/setter方法 一個...

    框架學習筆記之Hibernate框架基礎——Hibernate入門實例

      一、簡介: 面向java環境的對象/關系數據庫映射工具 不僅管理java類到庫的映射們還提供數據查詢和獲取數據的方法 對于開發者通常的數據持久化關于的編程任務,解放95% Hibernate對于中間層應用最好的場合。 相對于以數據操作的應用來說可能不是最好的選擇。 可以幫助開發者消除或者包裝那些針對特定廠商的sql代碼。建立跨越數據庫的應用平臺。 二、能做什么: 減少乏味的編碼,獲取...

    Hibernate框架之Query、Criteria、SQLQuery三個數據查詢對象

    Hibernate框架的作用是將持久化層的操作進行封裝,也就是把數據庫的操作進行了封裝,我們可以不使用sql語句就能更新數據庫。下面將介紹Query、Criteria、SQLQuery三個查詢對象。 一、Query 通過Session對象獲取,使用HQL語句。所謂HQL,就是Hibernate Query Language的縮寫,就是Hibernate的查詢語言。與SQL語句相似,但是面向的是對象...

    Hibernate框架之Criteria查詢 和注解

    為什么80%的碼農都做不了架構師?>>>    今天呢,我就詳細的寫著 Hibernate框架的一種檢索方式:Criteria查詢。下面我寫的這些案例,可能對于大牛沒有什么好看的,但是對于初學者來說,卻是一筆財富。   首先我們要知道的檢索方式:  Hibernate框架提供了5種檢索對象的方式    &nbs...

    【學習筆記-SSH框架】Hibernate高級-筆記01-類級別檢索策略

    Hibernate高級-筆記01-類級別檢索策略 目錄 檢索策略簡介 類級別立即加載 類級別延遲加載 0. 檢索策略簡介 在Hibernate中,Session主要有兩種檢索方法:get()和load(),這兩個方法都是用來從數據庫中檢索對象,并按照參數指定的對象標識符OID來加載一個持久化對象。 【示例】 檢索策略主要有以下兩種: 類級別檢索策略 使用Session的load()或get()方法...

    精品国产乱码久久久久久蜜桃不卡