您好,登錄后才能下訂單哦!
具體說hibernate框架的項目搭建之前,首先說一下什么是框架。。。
框架可以理解成一個半成品的項目,它封裝了一些功能,我么需要掌握的是如何駕馭這些功能,不需要操心它是怎么實現(xiàn)的。其實他就是按照我們之前所學的內(nèi)容實現(xiàn)的??蚣芸梢蕴岣呶覀冮_發(fā)的效率。
那么,簡單介紹一下,什么是hibernate框架?
hibernate是dao層的框架,完成的功能是插入crud(增(create)、查(retrieve)、改(update)、刪(delete)).
hibernate是一個ORM框架(對象關系映射)。(Object Relational Mapping)
hibernate是以面向?qū)ο蟮姆绞竭M行數(shù)據(jù)庫的增刪改查,甚至不用寫sql語句。
ORM:
是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。用來把對象模型表示的對象映射到基于S Q L 的關系模型數(shù)據(jù)庫結構中去。這樣,我們在具體的操作實體對象的時候,就不需要再去和復雜的 SQ L 語句打交道,只需簡單的操作實體對象的屬性和方法。O R M 技術是在對象和關系之間提供了一條橋梁,前臺的對象型數(shù)據(jù)和數(shù)據(jù)庫中的關系型的數(shù)據(jù)通過這個橋梁來相互轉(zhuǎn)化。
項目搭建過程:
1、導包 (hibernate-release-5.2.12.Final.rar)
除此之外,還需要一個數(shù)據(jù)庫驅(qū)動包。mysql驅(qū)動包
2、建立實體bean類
①.所有的屬性應該設置為private,并附加get和set方法
②.構造函數(shù),如果不寫的話是可以的;但是如果寫的話,至少要寫兩個(必須要包含一個空的構造函數(shù))
③.字段名要設置為包裝類。(為什么使用包裝類?)
eg:小明考試考了零分和沒有參加考試是有區(qū)別的。如果使用基本類型則無法表示,但是使用包裝類,則可以設置為null
④.實體類中必須有一個id(主鍵)
具體代碼示例奉上:(以學生類為例,未寫構造方法)
package cn.hd.bean;public class Student { private Integer sid; private String name; private String denger; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDenger() { return denger; } public void setDenger(String denger) { this.denger = denger; } @Override public String toString() { return "Student{" + "sid=" + sid + ", name='" + name + '\'' + ", denger='" + denger + '\'' + '}'; } }
3、建立數(shù)據(jù)庫對應的表
可以省略,hibernate可以幫助我們自動根據(jù)實體類生成數(shù)據(jù)表。(具體代碼后面會奉上)
4、 建立映射關系
第一步:建立一個配置文件,命名和位置都沒有強硬的規(guī)范,一般情況下規(guī)定,把這個文件放到對應的bean目錄下,命名規(guī)范為 實體類名 + .hbm +.xml
第二步:導入約束文件,聲明這個文件是hibernate配置文件,導入之后書寫配置的時候會有提示信息。
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
第三步:配置信息。
<hibernate-mapping> <!--name:Javabean類的相對路徑,table:數(shù)據(jù)庫表名--> <class name="cn.hd.bean.User" table="User"> <!-- id:數(shù)據(jù)庫中的主鍵,對應的是Javabean類中id(主鍵),和數(shù)據(jù)表中的主鍵, name:代表的是實體類中的名字 column:代表的是字段名(可以省略不寫) --> <id name="uid" column="uid"> <!-- generator:主鍵生成策略 代理主鍵 identity 是由數(shù)據(jù)庫自己維護,id自動加一 increment 數(shù)據(jù)庫自己維護,自動查詢表中數(shù)據(jù),然后進行id加1 hilo 高低位生成主鍵,需要用到一個額外的表,所有的數(shù)據(jù)庫都可以使用這種類型 native 我們用的(代表的上面三個) uuid (Java api 的生成策略,要自己去設置主鍵,) 自然主鍵 assigned 手工指定,比如指定UUID --> <generator class="native"></generator> </id> <!-- 其他的屬性 這里也可以設置數(shù)據(jù)庫中字段的屬性 type 生成表中的類型 legth not-null --> <property name="name" column="name"/> <property name="psd" column="psd"></property> </class>
補充:關于代理主鍵和自然主鍵 我的理解是,當將id也就是主鍵設置為int類型將它自動遞增時,用代理主鍵中的可以有數(shù)據(jù)庫自己維護,id自動增加的代理主鍵;而自然主鍵就是當id為其他類型的時候,需要手動添加主鍵的時候,去用自然主鍵。
5、配置hibernate核心配置文件
第一步:創(chuàng)建核心配置文件,文件的命名和位置都必須按照指定來,文件放在src目錄下,文件名為hibernate.cfg.xml。
第二步:導入約束文件。
<!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> <!--配置數(shù)據(jù)庫驅(qū)動--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibrnate?useUnicode=true&characterEncoding=utf-8</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <!-- 配置方言,指定用的什么數(shù)據(jù)庫 sql語句方言,我們在上面設置了數(shù)據(jù)庫的信息是mysql mysql 中的sql語句limit在Oracle中沒有 所以要設置方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!--設置hibernate執(zhí)行SQL語句的時候,自動顯示在控制臺上--> <property name="hibernate.show_sql">true</property> <!--設置顯示的格式--> <property name="hibernate.format_sql">true</property> <!-- 設置數(shù)據(jù)庫表的生成策略,自動建表 測試時: create 每次執(zhí)行hibernate 就會創(chuàng)建新的表,原來的數(shù)據(jù)就會丟失 create-drop 每次執(zhí)行完hibernate之后就會將表給刪除掉 原來的數(shù)據(jù)就會丟失 開發(fā)時: update 每次啟動檢查數(shù)據(jù)表是否有有更新,如果有則自動更新,如果沒有,則不變 validate 校驗 對數(shù)據(jù)表不進行任何操作 --> <property name="hibernate.hbm2ddl.auto">update</property> <!--加載映射文件,將hbm配置文件配置到核心文件中,使其自動讀取--> <mapping resource="cn/hd/bean/User.hbm.xml"></mapping> <mapping resource="cn/hd/bean/Student.hbm.xml"></mapping> </session-factory></hibernate-configuration>
6、書寫dao層測試代碼
其中的student對象,就是未建立數(shù)據(jù)表之前運行;運行后數(shù)據(jù)表自動創(chuàng)建。
package cn.hd.test;import cn.hd.MyUtils.HibernateUtils;import cn.hd.bean.Student;import cn.hd.bean.User;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;public class Demo { public static void main(String[] args) { /*讀取配置文件 .configure()自動讀取cfg.xml文件*/ Configuration configuration = new Configuration().configure(); /*獲得sessionFactory對象,自動生成表,讀取數(shù)據(jù)庫信息,檢查數(shù)據(jù)表是否更新 * 這個對象我們用它只用來獲取session * 實際上這行代碼 它檢查了數(shù)據(jù)庫和實體類 * 如果有變化它會更新 * 非常耗費資源 解決方案:(封裝工具類) * */ SessionFactory sessionFactory = configuration.buildSessionFactory(); /*使用sessionFactory獲得session對象*/ Session session = sessionFactory.openSession(); /*開啟事務 * hibernate 必須開啟事務 * 不開啟事務不會將數(shù)據(jù)保存到數(shù)據(jù)庫 * */ Transaction transaction = session.beginTransaction(); /*向數(shù)據(jù)表中插入一條數(shù)據(jù)*/ /*User user = new User(); user.setName("張三"); user.setPsd("38383838");*/ Student student = new Student(); student.setName("張三"); student.setDenger("男"); /*添加、保存方法*/ session.save(student); /*提交事務*/ transaction.commit(); /*關閉資源*/ session.close(); sessionFactory.close(); } }
如果能夠往數(shù)據(jù)表中添加數(shù)據(jù)的話,就說明你的hibernate框架項目搭建成功?。。?/span>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。