Hibernate連接數(shù)據(jù)庫(kù)

開團(tuán)先了解一番情況:

Hibernate (開放源代碼的對(duì)象關(guān)系映射框架)
POJO(Plain Ordinary Java Object):簡(jiǎn)單的Java對(duì)象
Session :會(huì)話控制
Hibernate :主鍵策略

與JDBC的優(yōu)勢(shì):
(1)連接方便:在類中映射關(guān)系即可,關(guān)閉會(huì)話而不關(guān)閉連接;
(2)使用方便:nocation幫助解決數(shù)據(jù)庫(kù)語(yǔ)句問(wèn)題知牌,需打印某列直接調(diào)用類中方法
(3)心情愉悅楼肪。

- 在Java中的連接: 配置的實(shí)體映射
 //configuration(組態(tài)) : 配置數(shù)據(jù)源杆兵。
 //configure( )中加載 cfg.xml 文件膜宋,傳入該文件在項(xiàng)目中的相對(duì)位置
 //SessionFactory:負(fù)責(zé)初始化Hibernate ,它充當(dāng)數(shù)據(jù)庫(kù)存儲(chǔ)源的代理磷醋,線程安全
 //Session  :負(fù)責(zé)執(zhí)行被持久化的CRUD操作坛缕,非線程安全

①SessionFactory sf = new Configuration().configure().buildSessionFactory();
//倘若在輸入 ① ② 兩句后還是出現(xiàn)空指針錯(cuò)誤的話墓猎,就需要添加第三句,在中間:版本問(wèn)題祷膳。
③StandardServiceRegistry  serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
②Session session = sf.openSession();

對(duì)應(yīng) 的XML 文件內(nèi)容:

<!-- 實(shí)體映射 -->
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration>
    <session-factory>
    
        <property name="show_sql">true</property>
        
        <!-- 配置JDBC Driver --> / 調(diào)用java中對(duì)應(yīng)的加載程序陶衅;

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>       
        <!-- 配置數(shù)據(jù)庫(kù)連接URL -->
        <property name="connection.url">jdbc:mysql://localhost:3306/qingke?useSSL=false</property>
        
        <!-- 配置數(shù)據(jù)庫(kù)連接用戶名 -->
        <property name="connection.username">root</property>
    
        <!-- 配置數(shù)據(jù)庫(kù)連接用戶密碼 -->
        <property name="connection.password">xyaychA</property>
        
        <!-- 配置hibernate使用的數(shù)據(jù)庫(kù)方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <!-- <mapping class="hibernate.Student"/> 
        <mapping resource="properties/apartment.hbm.xml"/>
        // 用XML文件來(lái)反應(yīng)對(duì)象:
        <mapping resource="properties/college.hbm.xml"/>
        <mapping resource="properties/major.hbm.xml"/>
        <mapping resource="properties/course.hbm.xml"/>-->
        // 用類的映射方式關(guān)聯(lián)對(duì)象:
        <mapping class="hibernate.sqlclass.Student"/>
        <mapping class="hibernate.sqlclass.StudentLogin"/>
        <mapping class="hibernate.sqlclass.StudentStatus"/>
        <mapping class="hibernate.sqlclass.Teacher"/>
        
    </session-factory>
</hibernate-configuration>

Hibernate :實(shí)體狀態(tài)

  • 瞬時(shí)/臨時(shí)狀態(tài)(Transient) : 對(duì)象不存在與數(shù)據(jù)庫(kù) 以及session緩存中
  • 持久化狀態(tài)(Persistent):對(duì)象存在于數(shù)據(jù)庫(kù)以及session緩存中
  • 離線狀態(tài)(Detached):對(duì)象存在于數(shù)據(jù)庫(kù)但不存在與session緩存中屡立,即尚未被session管理直晨。
image.png

Hibernate 事務(wù)管理

  • rollback ( ) 回滾搀军。
  • commit ( ) 提交。
  • session.save(object)
  • Hibernate 增加勇皇、刪除罩句、更新

關(guān)系映射:

一:Hibernate有兩種映射實(shí)體一對(duì)一關(guān)聯(lián)關(guān)系的實(shí)現(xiàn)方式:共享主鍵方式和唯一外鍵方式。
    1.共享主鍵方式:所謂共享主鍵方式就是限制兩個(gè)數(shù)據(jù)表的主鍵使用相同的值敛摘,通過(guò)主鍵形成一對(duì)一映射關(guān)系门烂。
    2.唯一外鍵方式:所謂唯一外鍵方式就是一個(gè)表的外鍵和另一個(gè)表的唯一主鍵對(duì)應(yīng)形成一對(duì)一映射關(guān)系,這種一對(duì)一的關(guān)系其實(shí)就是多對(duì)一關(guān)聯(lián)關(guān)系的一種特殊情況.
二:映射多對(duì)一單向?qū)嶓w關(guān)聯(lián)關(guān)系:外鍵參照方式

//student.hbm.xml文件 XML 方式連接
<?xml version="1.0" encoding="UTF-8"?>

<hibernate-mapping>
    <class name = "hibernate.sqlclass.Student" table="student">
        <id name = "id" column = " id">
            <generator class = "native" />
        </id>
        
        <property name = "lastname" column ="lastname"/>
        <property name = "firstname" column ="firstname"/>
        <property name = "password" column ="password"/>
        <property name = "email" column ="email"/>
        <property name = "height" column ="height"/>
        <property name = "weight" column ="weight"/>
        <property name = "gender" column ="gender"/>
    
    <!-- 一對(duì)一 (StudentLogin) -->  對(duì)應(yīng)Student.class 文件中private StudentLogin login 屬性
        <one-to-one name = "login" class = "hibernate.sqlclass.StudentLogin" cascade="all" />
        <one-to-one name="student" class="hibernate.sqlclass.Student"/>
        
    <!--  多對(duì)一 name="propertiesName" column="columnName" class="className" -->
        <many-to-one name = "status" column="student_status_id" class = "hibernate.sqlclass.StudentStatus"  />
        一對(duì)多方:
        <set name = "students" table ="teacher_has_student">
            <key column="teacher_id" />
            <many-to-many column="student_id" class="hibernate.Student" />
        </set>
        
    <!-- 多對(duì)多 主控方 --> 
        <set name = "teachers" table ="teacher_has_student">
            <key column ="student_id"/>
            <many-to-many column ="teacher_ids" class="hibernate.Teacher"/>
        </set>
    <兄淫!-- 被控方 -->
        <set name = "students" table ="teacher_has_student">
            <key column="teacher_id" />
            <many-to-many column="student_id" class="hibernate.Student" />
        </set>
        
    </class>
</hibernate-mapping>
通過(guò)類映射:@Entity    @Table(name="表名")  @Id 該類對(duì)應(yīng)表的主鍵   @Column 對(duì)應(yīng)的屬性屯远;

一、多對(duì)多(主控方):
@ManyToMany
@JoinTable(name="teacher_has_student",  //中間表為:middle_table_name
        joinColumns = @JoinColumn (name="student_id"), //主控方在中間表中的外鍵名
        inverseJoinColumns = @JoinColumn (name="teacher_id")) //被控方在中間表中的外鍵名
private Set<Teacher> teachers;
(被控方): @ManyToMany ( mappingBy = "propertyName")捕虽;

二慨丐、一對(duì)多關(guān)系(雙向):
一對(duì)多:
@OneToMany, 
@JoinColumn(name = "foreginKeyName ")
多對(duì)一:
@ManyToOne(),
@JoinColumn ( name = "foreginKeyName " )

三、一對(duì)一(雙向):
@OneToOne
@PrimaryKeyJoinColumn(name="id") //共享主鍵
private StudentLogin login;

@OneToOne(mappedBy= "login")
private Student student;//唯一外鍵 屬性名泄私。即:Student中private StudentLogin login; 

其他

  • lazy Load(延遲加載):為了減少由于大量關(guān)聯(lián)信息引起的查詢性能負(fù)擔(dān)房揭,需要時(shí)才加載。
  • 級(jí)聯(lián)設(shè)置(cascade):
    1.all - 所有操作都執(zhí)行級(jí)聯(lián)刪除.
    2.none - 所有都不.
    3.update.
    4.delete.
  • 控制設(shè)置(inverse)
  1. 是否將維護(hù)關(guān)系的權(quán)利交給對(duì)方
  2. 默認(rèn)值為false,可選true
  3. 一對(duì)多關(guān)系中晌端,通常將 “一” 為true捅暴,即由 多 來(lái)維護(hù)關(guān)系
  4. Java Annotation中由mappedBy
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咧纠,隨后出現(xiàn)的幾起案子蓬痒,更是在濱河造成了極大的恐慌,老刑警劉巖惧盹,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乳幸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钧椰,警方通過(guò)查閱死者的電腦和手機(jī)粹断,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嫡霞,“玉大人瓶埋,你說(shuō)我怎么就攤上這事≌锘Γ” “怎么了养筒?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)端姚。 經(jīng)常有香客問(wèn)我晕粪,道長(zhǎng),這世上最難降的妖魔是什么渐裸? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任巫湘,我火速辦了婚禮装悲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尚氛。我一直安慰自己诀诊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布阅嘶。 她就那樣靜靜地躺著属瓣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讯柔。 梳的紋絲不亂的頭發(fā)上抡蛙,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音魂迄,去河邊找鬼溜畅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛极祸,可吹牛的內(nèi)容都是我干的慈格。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遥金,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浴捆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起稿械,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤选泻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后美莫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體页眯,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年厢呵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窝撵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡襟铭,死狀恐怖碌奉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寒砖,我是刑警寧澤赐劣,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站哩都,受9級(jí)特大地震影響魁兼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漠嵌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一咐汞、第九天 我趴在偏房一處隱蔽的房頂上張望判哥。 院中可真熱鬧,春花似錦碉考、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至章钾,卻和暖如春墙贱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贱傀。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工惨撇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人府寒。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓魁衙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親株搔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剖淀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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