新手上路之Hibernate:第一個Hibernate例子

一、Hibernate概述

(一)什么是Hibernate?

Hibernate核心內容是ORM(關系對象模型)。可以將對象自動的生成數據庫中的信息,使得開發更加的面向對象。這樣作為程序員就可以使用面向對象的思想來操作數據庫,而不用關心繁瑣的JDBC。所以,Hibernate處于三層架構中的D層(持久層)。

(二)使用Hibernate的優點

1、Hibernate可以使用在java的任何項目中,不一定非要使用在java web項目中。因為Hibernate不需要類似于tomact這些容器的支持,可以直接通過一個main方法進行測試。

2、通過下面的實例,可以發現使用Hibernate可以大大減少代碼量。

3、由于使用了Hibernate,代碼中不涉及具體的JDBC語句,所以就方便了代碼的可移植性。

二、Hibernate開發的環境搭建

(一)Hibernate的環境搭建非常簡單,只需要引入Hibernate核心包(單擊下載)以及Hibernate依賴包(單擊下載)即可。
(二)加入數據庫驅動。下面的例子中主要是采用Mysql數據庫來演示的,所以在這里引入MysqL的JDBC驅動(點擊下載)。
(三)提供核心配置文件hibernate.cfg.xml文件(在src文件夾下即可)。其中的配置如下(針對mysql)
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!-- mysql數據庫驅動 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- mysql數據庫名稱 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property><!-- 數據庫的登陸用戶名 --><property name="hibernate.connection.username">root</property><!-- 數據庫的登陸密碼 --><property name="hibernate.connection.password">root</property><!-- 方言:為每一種數據庫提供適配器,方便轉換 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property></session-factory>
</hibernate-configuration>

三、HIbernate第一個實例

該實例的目錄結構如下
說明:最后一個HIBERNATE3里面包含了所有的需要引用的jar包

1、新建一個普通的java項目,按照上面的步驟引入相關的jar包和配置文件

2、建立User實體類
import java.util.Date;public class User {private String id;private String username;private String password;private Date createTime;private Date expireTime;public String getId() {return id;}public void setId(String 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;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Date getExpireTime() {return expireTime;}public void setExpireTime(Date expireTime) {this.expireTime = expireTime;}
}

2、提供User.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"><hibernate-mapping><class name="com.example.hibernate.User"><id name="id"><generator class="uuid"/></id><property name="username"/><property name="password"/><property name="createTime"/><property name="expireTime"/></class>
</hibernate-mapping>
其中的property標簽是將要生成是數據庫表中的字段,在這里不用關心各個字段是什么類型的。因為Hibernate會根據上面的實體類中屬性的類型來決定將來表中字段的類型

3、配置hibernate.cfg.xml文件
<hibernate-configuration><session-factory ><!-- mysql數據庫驅動 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- mysql數據庫名稱 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property><!-- 數據庫的登陸用戶名 --><property name="hibernate.connection.username">root</property><!-- 數據庫的登陸密碼 --><property name="hibernate.connection.password">root</property><!-- 方言:為每一種數據庫提供適配器,方便轉換 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><mapping resource="com/example/hibernate/User.hbm.xml"/></session-factory>
</hibernate-configuration>
注意:必須是“/”而不能是“.”。
4、生成表:編寫工具類ExoprtDB.java,將hbm生成ddl
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/*** 將hbm生成ddl* @author BCH**/
public class ExoprtDB {public static void main(String[] args) {//默認讀取hibernate.cfg.xml文件Configuration cfr = new Configuration().configure();SchemaExport export = new SchemaExport(cfr);export.create(true, true);}
}
到這里就可以生成User表了,但是如果直接運行ExoprtDB.java文件是不能生成User表的。因為在mysql數據中還沒有建立數據庫Hibernate-first。所以在mysql控制臺中通過create database hibernate-first; use hibernate-first;之后再執行ExoprtDB.java文件就可以生成表了。

5、向表中添加數據
import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class Client {public static void main(String[] args) {//讀取配置文件Configuration cfg = new Configuration().configure();SessionFactory factory = cfg.buildSessionFactory();Session session = null;try{session = factory.openSession();//開啟事務session.beginTransaction();User user = new User();user.setUsername("用戶名");user.setPassword("123");user.setCreateTime(new Date());user.setExpireTime(new Date());session.save(user);//提交事務session.getTransaction().commit();}catch(Exception e){e.printStackTrace();//回滾事務session.getTransaction().rollback();}finally{if(session != null){if(session.isOpen()){//關閉sessionsession.close();}}}}
}

執行該java文件就可以完成向表中增加數據了,效果如下


(四)總結

通過上面的代碼我們可以看出,在代碼中沒有涉及到任何有關JDBC的代碼,作為開發人員只需要寫好相應的實體類,然后通過配置就可以實現了表的建立以及向表中實現數據的插入。
在代碼中有許多Hibernate的核心對象,例如Configuration、SessionFactory、Session等等。這些內容將在以后介紹。

From:http://blog.csdn.net/aboy123/article/details/10085635

轉載于:https://www.cnblogs.com/jinxiang1224/p/8468214.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252073.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252073.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252073.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

模板標簽及模板的繼承與引用

1.常用的模板標簽 - 作用是什么:提供各種邏輯 view.py: def index(request):#模板標簽 --常用標簽 總結&#xff1a;語法 {% tag %} {% endtag %} {% tag 參數 參數 %} 示例 展示頁index.html&#xff0c;包含for標簽&#xff0c;if標簽&#xff0c;url標簽 {% extends teacher…

文件夾操作之創建

創建文件夾可通過Directory類的CreateDirectory方法來實現格式為&#xff1a;Directory.CreateDirectory(“文件路徑”)&#xff1b;String path“C:\Users\Administrator\Desktop\51zxw”&#xff1b; If&#xff08;Directory.exists&#xff08;path&#xff09;&#xff09…

doxygen

http://www.doxygen.nl/轉載于:https://www.cnblogs.com/zengkefu/p/7383793.html

C#:RichTextBox 追加其它顏色的行列

1、新建靜態擴展方法public static class RichTextBoxExtension{public static void AppendTextColorful(this RichTextBox rtBox, string text, Color color, bool addNewLine true){if (addNewLine){text Environment.NewLine;}rtBox.SelectionStart rtBox.TextLength;rtB…

Golang實現一個密碼生成器

小地鼠防止有人偷他的果實&#xff0c;在家里上了一把鎖。這個鎖怎么來的呢&#xff1f;請往下看。。 package mainimport ("flag""fmt""math/rand""time" )var (length intcharset string )const (NUmStr "0123456789"C…

Java基礎知識(二)

1、String、StringBuffer、StringBuilder 操作少量數據->String單線程操作字符串緩沖區下操作大量數據->StringBuilder多線程操作字符串緩沖區下操作大量數據->StringBuffer可變性&#xff1a;String類中使用final關鍵字private final char value[]&#xff0c;所以St…

C# WPF:初識布局容器

StackPanel堆疊布局 StackPanel是簡單布局方式之一&#xff0c;可以很方便的進行縱向布局和橫向布局 StackPanel默認是縱向布局的 <Window x:Class"WpfApplication1.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" …

Kibana源碼分析--Hapijs路由設置理解筆記

【ES6解構賦值】&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment 【Joi APi】&#xff1a;https://github.com/hapijs/joi/blob/v13.1.2/API.md 轉載于:https://www.cnblogs.com/lishidefengchen/p/866874…

Python打包EXE神器 pyinstaller

最近由于項目需要&#xff0c;以前的python文件需要編輯為EXE供前端客戶使用。 由于最早接觸的是distutils&#xff0c;所以一開始準備使用distutils和py2exe搭配來進行python的exe化&#xff0c;也就是傳統的使用setup.py的方式來進行exe安裝。但是結果都不是很好&#xff0c;…

好程序員HTML5前端教程-css的引入方式和選擇器

好程序員HTML5前端教程-css的引入方式和選擇器 01.引入css方式&#xff08;重點掌握&#xff09; 行內樣式 內接樣式 外接樣式      3.1 鏈接式      3.1 導入式 css介紹 現在的互聯網前端分三層&#xff1a; HTML&#xff1a;超文本標記語言。從語義的角度描述頁面結…

4.4.6 數組也能無鎖:AtomicIntegerArray

數組也可以實現cas操作&#xff0c;有以下幾個類以及用法如下&#xff1a; public class AtomicTntegerArrayTest {public static void main(String[] args) {AtomicIntegerArray atomicIntegerArraynew AtomicIntegerArray(3);AtomicLongArray atomicIntegerArray1new AtomicL…

20種PLC元件編號和Modbus編號地址對應表

1、三菱&#xff1a; X元件支持Modbus之02功能碼&#xff1b; Y元件支持Modbus之01、05、15功能碼&#xff1b; D元件支持Modbus之03、06、16功能碼。 2、西門子&#xff1a; I元件支持Modbus之02功能碼&#xff1b; Q元件支持Modbus之01、05、15功能碼&#xff1b; V元件…

暑期學習

由于最后大作業的呈現情況與短學期所完成的還相差甚遠&#xff0c;所以在暑期的時候開始進一步的細化。 在這個過程之中產生了如下的問題&#xff1a; 已解決的有&#xff1a; 1.用a標簽在同一頁面實現跳轉。 要點&#xff1a;標記<a href"../home#pre">的時候…

五、RabbitMQ的消息屬性(讀書筆記)

2019獨角獸企業重金招聘Python工程師標準>>> 簡介 當使用RabbitMQ發布消息時&#xff0c;消息又AMQP規范中的三個低層幀類型組成&#xff1a; Basic.publish方法幀&#xff1b;內容頭幀&#xff1b;消息體幀&#xff1b;這三種幀類型按順序一起工作&#xff0c;以便…

異步和單線程

轉載于:https://www.cnblogs.com/sunmarvell/p/8674748.html

windows下解決mysql5中文亂碼的問題

1.問題描述&#xff1a;一開始無論是在命令行&#xff0c;還是在mysql的客戶端輸入中文都會出現 “???” 問題之類的亂碼問題&#xff1b; 2.解決辦法&#xff1a; 1&#xff09;cmd 進入mysql &#xff0c;命令mysql -uroot -p123456 2&#xff09;然后執行 show variable…

C#:把dll封入exe中方法

在這個事件中,可以重新為加載失敗的程序集手動加載 如果你將dll作為資源文件打包的你的應用程序中(或者類庫中) 就可以在硬盤加載失敗的時候 從資源文件中加載對應的dll 就像這樣: class Program {static Program(){ //這個綁定事件必須要在引用到TestLibrary1這個程序…

P2685 [TJOI2012]橋

P2685 [TJOI2012]橋 思路&#xff1a; 先求出最短路&#xff1a; d1[u] : u 到 1 的最短路&#xff0c; d2[u] : u 到 n 的最短路 再求出一條從 1 到 n 的最短路鏈&#xff0c;然后從鏈上的每一個點出發dfs, 求出&#xff1a; l[u] : u 到 1 的最短路徑過中和鏈的交點&#xf…

C#結構類型圖

轉載于:https://www.cnblogs.com/kangao/p/8674838.html

C# 全局鉤子實現掃碼槍獲取信息

1.掃描槍獲取數據原理基本相當于鍵盤數據&#xff0c;獲取掃描槍掃描出來的數據&#xff0c;一般分為兩種實現方式。 a&#xff09;文本框輸入獲取焦點&#xff0c;掃描后自動顯示在文本框內。 b&#xff09;使用鍵盤鉤子&#xff0c;勾取掃描槍虛擬按鍵&#xff0c;根據按鍵頻…