02、Hibernate開發步驟

来源:https://www.cnblogs.com/CSAH/archive/2020/04/25/12771347.html
-Advertisement-
Play Games

1、創建Hibernate配置文件(hibernate.cfg.xml) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configura ...


1、創建Hibernate配置文件(hibernate.cfg.xml)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

    

     <!-- 配置連接資料庫的基本信息 -->

<property name="connection.username">root</property>

<property name="connection.password">root123</property>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="connection.url">jdbc:mysql:///hibernate5</property>

 

<!-- 配置 hibernate 的基本信息 -->

<!-- hibernate 指定資料庫所使用的 SQL 方言 -->

<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

 

<!-- 指定程式運行時是否在控制台輸出 SQL 語句 -->

<property name="show_sql">true</property>

 

<!-- 指定是否對輸出 SQL 語句進行格式化 -->

<property name="format_sql">true</property>

 

<!-- 指定程式運行時是否在資料庫自動生成數據表 -->

<property name="hbm2ddl.auto">update</property>

    

     <!-- 指定關聯的 .hbm.xml 文件 -->

     <mapping resource="csah/com/cnblogs/www/News.hbm.xml" />

    

    </session-factory>

</hibernate-configuration>

 

1)問題:生成cfg.xml時候彈出右下角內容,然後按finish一直無反應怎麼辦??

答:hibernate版本問題,就是第三行Hibernate version那個選擇低一點的版本 我看Jar包是4.3.x的,我選了4.3的就OK

2、創建持久化類

package csah.com.cnblogs.www;

 

import java.util.Date;

 

public class News {

private Integer id;

private String title;

private String author;

private Date date;

public Date getDate() {

return date;

}

public News(String title, String author, Date date) {

super();

this.title = title;

this.author = author;

this.date = date;

}

public void setDate(Date date) {

this.date = date;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public News() {

}

@Override

public String toString() {

return "News [id=" + id + ", title=" + title + ", author=" + author + ", date=" + date + "]";

}

}

 

3、創建對象-關係映射文件(*.hbm.xml)

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- Generated 2020-4-25 2:28:16 by Hibernate Tools 3.5.0.Final -->

<hibernate-mapping package="csah.com.cnblogs.www">

    <class name="News" table="NEWS">

        <id name="id" type="java.lang.Integer">

            <column name="ID" />

            <!-- 指定主鍵的生成方式, native: 使用資料庫本地方式 -->

            <generator class="native" />

        </id>

        <property name="title" type="java.lang.String">

            <column name="TITLE" />

        </property>

        <property name="author" type="java.lang.String">

            <column name="AUTHOR" />

        </property>

        <property name="date" type="java.util.Date">

            <column name="DATE" />

        </property>

    </class>

</hibernate-mapping>

 

1)問題:ids for this class must be manually assigned before calling save(): csah.com.cnblogs.www.News

答:我們只需要將<generator class="assigned " />設置為<generator class="native" />

4、通過Hibernate API編寫訪問資料庫代碼

package csah.com.cnblogs.www;

 

import static org.junit.jupiter.api.Assertions.*;

 

import java.sql.Date;

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.service.ServiceRegistryBuilder;

import org.junit.jupiter.api.Test;

 

import csah.com.cnblogs.www.*;

 

class HibernateTest {

 

@Test

public void test() {

 

System.out.println("test1...");

 

//1. 創建一個 SessionFactory 對象

SessionFactory sessionFactory = null;

System.out.println("test2...");

 

//1). 創建 Configuration 對象: 對應 hibernate 的基本配置信息和 對象關係映射信息

Configuration configuration = new Configuration().configure();

System.out.println("test3...");

 

//4.0 之前這樣創建

// sessionFactory = configuration.buildSessionFactory();

 

//2). 創建一個 ServiceRegistry 對象: hibernate 4.x 新添加的對象

//hibernate 的任何配置和服務都需要在該對象中註冊後才能有效.

ServiceRegistry serviceRegistry =

new ServiceRegistryBuilder().applySettings(configuration.getProperties())

                           .buildServiceRegistry();

System.out.println("test4...");

 

//3).

sessionFactory = configuration.buildSessionFactory(serviceRegistry);

System.out.println("test5...");

 

//2. 創建一個 Session 對象

Session session = sessionFactory.openSession();

System.out.println("test6...");

 

//3. 開啟事務

Transaction transaction = session.beginTransaction();

System.out.println("test7...");

 

//4. 執行保存操作

News news = new News("java", "ATGUIGU", new Date(new java.util.Date().getTime()));

System.out.println("test8...");

 

session.save(news);

System.out.println("test9...");

 

//5. 提交事務

transaction.commit();

System.out.println("test10...");

 

//6. 關閉 Session

session.close();

System.out.println("test11...");

 

//7. 關閉 SessionFactory 對象

sessionFactory.close();

System.out.println("test12...");

}

 

}

   註意:上面的多個system.out.println()可以測試代碼運行到哪一部分中斷,如如果System.out.println("test9...");沒有輸出,那麼我們只要找session.save(news)的問題即可。

1)問題:org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/cnblogs/com/CSAH/News.hbm.xml

java.lang.ClassNotFoundException: com.nblogs.com.CSAH.News

答:在News.hbm.xmlclass中的路徑出現錯誤 沒有找到'com.nblogs.com.CSAH.News'

 

2)問題:org.hibernate.MappingNotFoundException: resource: com/cnblogs/com/CSAH/News.hbm.xml not found

答:指定關聯的 .hbm.xml 文件路徑沒有找到

 

3)問題:Duplicate entry 'java' for key 2

答:插入的數據已經存在


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是閉包? 一個簡單的閉包如下: function a(){ var i=10; return function b(){ console.log(i) } } var c=a();//運行此處返回的是b函數 c();//執行b函數 從此處可以看出,其實閉包一句話總結就是:函數嵌套函數,然後外部函 ...
  • 拯救一切強迫症 讀《編寫可維護的 JavaScript》(一) 本文寫於 2020 年 4 月 24 日 我在小學的時候就有接觸過編程,所以讀大一的時候 C 語言還算是輕車熟路。自然會有很多同學給我看他們的代碼,麻煩我幫助他們找一找 bug。 我代碼拿到手的第一件事兒是啥? 重排代碼格式!(相信大家 ...
  • 在小程式項目中需要用到echarts圖表 但是展示的時候遇到了問題 圖表高度失真 體驗感非常差 經過一番查找實驗,終於找到瞭解決方案 下麵上代碼! function initChart(canvas, width, height,dpr) { const chart = echarts.init(c ...
  • 一. 普通對象與函數對象 JavaScript 中,萬物皆對象!但對象也是有區別的。分為普通對象和函數對象,Object 、Function 是 JS 自帶的函數對象。 o1 o2 o3 為普通對象,f1 f2 f3 為函數對象 (凡是通過 new Function() 創建的對象都是函數對象,其他 ...
  • 去掉下圖前面的兩個checkbox,然後點apply或者ok按鈕: ...
  • 場景:一個項目多個人用不同編輯器開發的時候,.editorconfig可以統一編輯器配置。避免各種換行空格數不一致等問題。 操作步驟:webstorm里找到配置,按照以下圖示導出.editorconfig,.editorconfig文件會出現在項目的根目錄里: ...
  • 能否找到工作,看有沒有公司接手類似的前端小白。 根據你的描述,你的web前端水平基本上處於切圖仔,如果有一家公司願意給你offer,就算不要薪水也要努力進去,先學技術為先。 另外,你目前只是剛剛入門,離初級前端工程師還有一段距離。 就跟我之前回答過的一個問題相似,“拿4K的前端開發都會做些什麼”,道 ...
  • jgGrid插件是非常常用的一個基於jQuery的表格插件,功能非常強大。我最近也頻繁使用。但是這個插件也有一些不夠完善的地方。比如這個getCol方法。 getCol方法接受三個參數 colname, returntype, mathoperation,返回一個數組( array類型)或一個值(數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...