hibernate開發(fā)步驟

原文鏈接http://zhhll.icu/2020/12/04/%E6%A1%86%E6%9E%B6/hibernate/hibernate%E5%BC%80%E5%8F%91%E6%AD%A5%E9%AA%A4/

hibernate開發(fā)步驟

  • 創(chuàng)建hibernate配置文件
  • 創(chuàng)建實(shí)體類
  • 創(chuàng)建對(duì)象-關(guān)系映射文件
  • 通過(guò)hibernate訪問(wèn)數(shù)據(jù)庫(kù)

下面提供一個(gè)簡(jiǎn)單地示例

hibernate配置文件

<?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>
        <!-- 配置連接數(shù)據(jù)庫(kù)信息 -->
        <property name="connection.url">jdbc:mysql://localhost:3306/studyhibernate</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>

        <!-- 配置hibernate的基本信息 -->
        <!-- hibernate方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <!-- 執(zhí)行操作時(shí)是否在控制臺(tái)打印 -->
        <property name="show_sql">true</property>
        <!-- 是否對(duì)SQL進(jìn)行格式化 -->
        <property name="format_sql">true</property>
        <!-- 指定自動(dòng)生成數(shù)據(jù)表的策略 -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- 指定關(guān)聯(lián)的映射文件 -->
        <mapping resource="User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

實(shí)體類

  • 提供一個(gè)無(wú)參構(gòu)造器:hibernate使用Constructor.newInstance()來(lái)實(shí)例化
  • 提供一個(gè)主鍵字段
  • 實(shí)體類的字段要聲明get/set方法:hibernate通過(guò)get/set方法來(lái)獲取字段
  • 使用非final的類:如果沒(méi)有實(shí)現(xiàn)接口的話仲锄,hibernate會(huì)使用cglib來(lái)生成代理蛀骇,final類不可以生成cglib代理
package com.zhanghe.study.model;

/**
 * @author zh
 * @date 2020/12/4 10:26
 */
public class User {

    private int id;

    private String name;

    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

hibernate映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- name為實(shí)體類   table為表名 -->
    <class name="com.zhanghe.study.model.User" table="user">
        <!-- name為字段名  type為類型  column為表的字段名 -->
        <id name="id" type="java.lang.Integer">
            <column name="id"/>
            <!-- 指定主鍵生成方式  navive 使用數(shù)據(jù)庫(kù)本地方式 -->
            <generator class="native"/>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"/>
        </property>
        <property name="age" type="java.lang.Integer">
            <column name="age"/>
        </property>
    </class>
</hibernate-mapping>

hibernate訪問(wèn)數(shù)據(jù)庫(kù)

package com.zhanghe.study;

import com.zhanghe.study.model.User;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

/**
 * @author zh
 * @date 2020/12/4 10:00
 */
public class Main {
    private static final SessionFactory sessionFactory;
    // 創(chuàng)建sessionFactory對(duì)象
    static {
        try {
            // 對(duì)應(yīng)的hibernate基本配置信息和對(duì)象關(guān)系映射信息
            Configuration configuration = new Configuration();
            // 找到hibernate.cfg.xml配置文件,如果沒(méi)有會(huì)報(bào)錯(cuò)  當(dāng)然也可以調(diào)用configure(String resource)有參的方法,自己指定配置文件名稱及位置
            configuration.configure();
            // 4.0之前不需要使用serviceRegistry  直接構(gòu)建sessionFactory  configuration.buildSessionFactory()
            // 4.0之后創(chuàng)建serviceRegistry,所有的配置和服務(wù)都要在該對(duì)象中注冊(cè)才可以生效
            // 4.3之前使用該方式new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    // 創(chuàng)建session對(duì)象
    public static Session getSession() throws HibernateException {
        return sessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception {
        final Session session = getSession();
        // 開啟事務(wù)
        Transaction transaction = session.beginTransaction();
        try {
            User user = new User();
            user.setAge(20);
            user.setName("張三");
            session.save(user);
            transaction.commit();
        } catch (Exception e){
            transaction.rollback();
            e.printStackTrace();
        } finally {
            session.close();
        }
    }
}

由于本身的博客百度沒(méi)有收錄村缸,博客地址http://zhhll.icu

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市武氓,隨后出現(xiàn)的幾起案子梯皿,更是在濱河造成了極大的恐慌仇箱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件索烹,死亡現(xiàn)場(chǎng)離奇詭異工碾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)百姓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門渊额,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人垒拢,你說(shuō)我怎么就攤上這事旬迹。” “怎么了求类?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵奔垦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我尸疆,道長(zhǎng)椿猎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任寿弱,我火速辦了婚禮犯眠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘症革。我一直安慰自己筐咧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布噪矛。 她就那樣靜靜地躺著量蕊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艇挨。 梳的紋絲不亂的頭發(fā)上残炮,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音雷袋,去河邊找鬼吉殃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛楷怒,可吹牛的內(nèi)容都是我干的蛋勺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸠删,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抱完!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起刃泡,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巧娱,失蹤者是張志新(化名)和其女友劉穎碉怔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禁添,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撮胧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了老翘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芹啥。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铺峭,靈堂內(nèi)的尸體忽然破棺而出墓怀,到底是詐尸還是另有隱情,我是刑警寧澤卫键,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布傀履,位于F島的核電站,受9級(jí)特大地震影響莉炉,放射性物質(zhì)發(fā)生泄漏钓账。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一絮宁、第九天 我趴在偏房一處隱蔽的房頂上張望官扣。 院中可真熱鬧,春花似錦羞福、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至遭顶,卻和暖如春张峰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棒旗。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工喘批, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铣揉。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓饶深,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逛拱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敌厘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容