<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 導入依賴 ~~~ <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided</scope> </dependency> <!-- 添加Junit依賴 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 錢相關 --> <dependency> <groupId>org.joda</groupId> <artifactId>joda-money</artifactId> <version>1.0.1</version> </dependency> <!-- 類型映射相關 --> <dependency> <groupId>org.jadira.usertype</groupId> <artifactId>usertype.core</artifactId> <version>6.0.1.GA</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!-- <version>5.1.48</version>--> <version>8.0.18</version> </dependency> <!-- 添加hibernate依賴包 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.6.Final</version> </dependency> ~~~ # 配置hibernate.cfg.xml 核心配置文件 位置必須是在src下面 名稱: 必須是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> <!-- mysql賬戶名 --> <property name="connection.username">root</property> <!-- mysql密碼 --> <property name="connection.password">root</property> <!-- mysql驅動 --> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <!-- mysql連接URL --> <property name="connection.url">jdbc:mysql:///app?useUnicode=true&amp;characterEncoding=UTF-8</property> <!-- 數據庫方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 顯示sql語句 --> <property name="show_sql">true</property> <!-- 格式化sql語句 --> <property name="format_sql">true</property> <!-- 根據需要創建數據庫 --> <!-- hbm2ddl.auto的取值 * none : 不用Hibernate自動生成表. * create : 每次都會創建一個新的表.(測試) * create-drop : 每次都會創建一個新的表,執行程序結束后刪除這個表(測試) * update : 如果數據庫中有表,使用原來的表,如果沒有表,創建一個新的表,可以更新表結構 * validate : 只會使用原有的表,對映射關系進行校驗 --> <property name="hbm2ddl.auto">create</property> </session-factory> </hibernate-configuration> ~~~ idea添加配置文件 `project structure`->Facets->+號->Hibernate ![](https://img.kancloud.cn/02/02/020209e924aa26941872ca607a3accff_472x320.png) ![](https://img.kancloud.cn/33/0b/330b6199e9e4cfcd5439948692d33a4f_836x147.png) # idea生成 創建goods表 ![](https://img.kancloud.cn/97/e3/97e3cc326e3f9d519a89d6dab76bc1b8_191x164.png) ![](https://img.kancloud.cn/77/82/7782a16347e57d86adbd54b71dad18b1_1054x1350.png) **生成hibernate的數據庫映射類** ![](https://img.kancloud.cn/02/07/0207c1358f6ab3c0dc0586609bfa455d_874x786.png) ![](https://img.kancloud.cn/a1/08/a108d544a943a68608e8713a215a4c83_731x493.png) Choose Data Source選擇數據庫源 package選擇的是放映射類的文件夾 ![](https://img.kancloud.cn/c8/e9/c8e9b3f45c6f121a6046a2e09507ca3b_492x729.png) 這一步OK之后,查看最終結果 **不過生成的不好,類型應該用包裝類型不要用基本類型** **比如int類型分數,0分和沒有考null,用包裝類能表示** **給映射類加一個無參構造方法,有參構造方法可加可不加** **配置hibernate.cfg.xml,添加剛剛生成的映射類** ~~~ <!-- 格式化sql語句 --> <property name="format_sql">true</property> <!-- 根據需要創建數據庫 --> <property name="hbm2ddl.auto">create</property> <mapping class="com.xubafiu.Goods"></mapping> </session-factory> </hibernate-configuration> ~~~ # 測試 ~~~ import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; public class TestGoods { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init() { //創建配置對象,加載核心配置文件,src下的hibernate.cfg.xml,也可以指定位置.configure("/path/xml"); Configuration configuration = new Configuration().configure(); //創建sessionFactory會話工廠 sessionFactory = configuration.buildSessionFactory(); //開啟session會話,類似連接 session = sessionFactory.openSession(); //開啟事務 transaction = session.beginTransaction(); } @After public void destory() { //事務提交, 事務回滾是transaction.rollback(); transaction.commit(); //關閉session會話 session.close(); //關閉sessionFactory會話工廠 sessionFactory.close(); } @Test public void testGoods() { //生成對象 Goods goods = new Goods(1, "abc", 2333.33); //保存對象進數據庫 session.save(goods); } } ~~~ # xml方式 在實體類所在包里面創建,實體名稱.hbm.xml ![](https://img.kancloud.cn/85/bd/85bdc9e8e0008409f8b95c96a6dc4da1_1306x1398.png) ## 映射配置文件 ~~~ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- package屬性:填寫一個包名.在元素內部凡是需要書寫完整類名的屬性,可以直接寫簡答類名了. --> <!-- <hibernate-mapping package="domain"> --> <hibernate-mapping> <!-- 1. 配置類和表對應 class標簽 name屬性: 實體類全路徑 table屬性: 數據庫表名稱 --> <class name="dao.Goods" table="goods"> <!-- 2. 配置實體類和表id對應 hibernate要求實體類有一個屬性唯一值 要求表有字段作為唯一值 --> <!-- id元素:配置主鍵映射的屬性 name: 填寫主鍵對應屬性名 column(可選): 填寫表中的主鍵列名.默認值:列名會默認使用屬性名 type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型. 每個類型有三種填法: java類型|hibernate類型|數據庫類型 not-null(可選):配置該屬性(列)是否不能為空. 默認值:false length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度 --> <id name="id" column="id"> <!-- 設置數據庫表id增長策略, native: 生成表id值就是主鍵自動增長 --> <generator class="native" /> </id> <!-- 配置其他屬性和表字段對應 --> <!-- property元素:除id之外的普通屬性映射 name: 填寫屬性名 column(可選): 填寫列名 type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型. 每個類型有三種填法: java類型(要寫全了java.lang.string)|hibernate類型(string)|數據庫類型 not-null(可選):配置該屬性(列)是否不能為空. 默認值:false length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度 --> <property name="name" column="name" /> <property name="price" column="price" /> </class> </hibernate-mapping> ~~~ 如果用這個的話,核心配置文件要修改 **在核心配置文件中添加** ~~~ <!-- 把映射配置文件放到核心配置文件中 --> <mapping resource="dao/Goods.hbm.xml" /> </session-factory> </hibernate-configuration> ~~~ # SessionFactory 1. 使用configuration對象創建sessionFactory對象 根據核心配置文件中,有數據庫配置,有映射文件部分,到數據庫里面根據映射關系把表創建 ~~~ <!-- 根據需要創建數據庫 --> <property name="hbm2ddl.auto">create</property> ~~~ 2. 創建sessionFactory過程中,這個過程特別耗資源,一個項目只建議創建一個 # Hibernate執行原理總結 hibernate工作原理: 1. 通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件。 2. 由hibernate.cfg.xml中的讀取解析映射信息。 3. 通過config.buildSessionFactory();//得到sessionFactory。 4. sessionFactory.openSession();//得到session。 5. session.beginTransaction();//開啟事務。 6. persistent operate; 7. session.getTransaction().commit();//提交事務 8. 關閉session; 9. 關閉sessionFactory; # session常用方法 ~~~ save 保存對象 update 修改操作 delete刪除 get/load 根據id進行查詢 savenOrUpdate 執行save或update操作 createQuery()獲取一個Query對象 CreateSQLQUery()獲取一個可以操作sql的SQLQuery對象 createCriteria() 獲取一個Criteria它可以完成條件查詢 ~~~ # Transaction事務 Transaction接口主要用于管理事務,它是hibernate的事務接口,對底層的事務進行了封裝。使用它可以進行事務操作。 commit 事務提交 rollback 事務回滾 問題: 獲取一個Transaction對象 ~~~ Session.beginTransaction(); ~~~ 問題: 如果在程序中沒有開啟事務,是否存在事務? 有事務,session的每一個操作就會開啟一個事務。 默認不自動提交 ~~~ <!-- 用于設置事務提交方式 --> <property name="hibernate.connection.autocommit">false</property> ~~~ # 什么是持久化類? Persistent Object (PO) PO=POJO+hbm映射配置 對于hibernate中的PO編寫規則: 1. 必須提供一個無參數的public構造方法 2. 所有屬性要private ,對外提供public 的get/set方法 3. 在PO類必須提供一個標識屬性,讓它與數據庫中的主鍵對應,我們管這個屬性叫OID 4. PO類中的屬性盡量使用基本數據類型的包裝類. Int->Integer double-->Double float->Float 5. PO類它不能使用final修飾符 # OID作用 ~~~ OID指的是與數據庫中表的主鍵對應的屬性。 ~~~ Hibernate框架它是通過OID來區分不同的PO對象,如果在內存中有兩個相同的OID對象,那么hibernate認為它們是同一個對象。 # 為什么PO類屬性它要使用包裝類型? 使用基本數據類型是沒有辦法去描述不存在概念,如果使用包裝類型,它就是一個對象,對于對象它的默認值是null. 但是基礎類型,比如int類型表示分數,沒有考應該是null,這個int表示不了 # PO類不可以使用final修飾?(hibernate中的get/load方法的區別) ~~~ Get/load方法它們都是根據id去查詢對象。 ~~~ 1. get直接得到了一個持久化類型對象,它就是立即查詢操作 load它得到的是持久化類開的代理類型對象(子類對象)。它采用了一種延遲策略來查詢數據。 2. get方法在查詢時,如果不存在返回null load方法在查詢時,如果不存在,會產生異常 ObjectNotFoundException.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看