最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb?Hibernate使用全面介紹

 更新時(shí)間:2022年10月27日 11:27:20   作者:showswoller  
在正式進(jìn)入Hibernate的高級(jí)應(yīng)用之前,需要了解聲明是數(shù)據(jù)模型與領(lǐng)域模型,這兩個(gè)概念將會(huì)幫助我們更好的理解實(shí)體對(duì)象的關(guān)聯(lián)關(guān)系映射

前言

以下內(nèi)容科班同學(xué)學(xué)過(guò)UML和數(shù)據(jù)庫(kù)的應(yīng)該比較熟悉

數(shù)據(jù)模型:數(shù)據(jù)模型是對(duì)數(shù)據(jù)庫(kù)特征的抽象,也就是用戶從數(shù)據(jù)庫(kù)中看到的模型,例如一張數(shù)據(jù)表或者用戶從數(shù)據(jù)表中所看到的存儲(chǔ)信息,此模型既要面向?qū)ο笥忠嫦蛳到y(tǒng)

領(lǐng)域模型:領(lǐng)域模型是對(duì)現(xiàn)實(shí)世界中的對(duì)象的可視化表現(xiàn),又稱為概念模型,領(lǐng)域模型或者分析對(duì)象模式,沒(méi)有所謂唯一正確的領(lǐng)域模型,所有模型都是對(duì)我們?cè)噲D要理解的領(lǐng)域的近似,領(lǐng)域模型主要是在特定群體用于理解和溝通的工具

一、實(shí)體關(guān)聯(lián)之間的映射

接下來(lái)的內(nèi)容與數(shù)據(jù)庫(kù)中的ER圖映射成關(guān)系表十分相似

1、單向多對(duì)一的關(guān)聯(lián)

兩個(gè)類映射成表,并且把被關(guān)聯(lián)表的主鍵作為關(guān)聯(lián)表的外鍵

<hibernate-mapping>
 <class name="com.mr.product.Product" table="tab_product">
 <id name="id" column="id" type="int">
 <generator class="native"/>
 </id>
<property name="name" type="string" length="45">
 <column name="name"/>
</property>
<property name="price" type="double">
<column name="price"/>
</property>
<many-to-one name="factory" class="com.mr.factory.Factory">
<column name="factoryid"/>
</many-to-one>
</class>
</hibernate-mapping>

2、多對(duì)一雙向關(guān)聯(lián)

以任一個(gè)表的主鍵作另一個(gè)表的外鍵都可以

<hibernate-mapping>
 <class name="com.mr.product.Product" table="tab_product">
 <id name="id" column="id" type="int">
 <generator class="native"/>
 </id>
<property name="name" type="string" length="45">
 <column name="name"/>
</property>
<set name="products" inverse="true">
<key column="factoryid"/>
</property>
<one-to-many  class="com.mr.product.Product">
</set>
</class>
</hibernate-mapping>

3、一對(duì)一主鍵關(guān)聯(lián)

指的是兩個(gè)表之間通過(guò)主鍵形成一對(duì)一的映射

<hibernate-mapping>
 <class name="com.mr.people.People" table="tab_people">
 <id name="id" column="id" type="int">
 <generator class="native"/>
 </id>
<property name="name" type="string" length="45">
 <column name="name"/>
</property>
 <property name="sex" type="string" length="2">
<column name="sex"/>
 </property>
<property name="age" type="int">
 <column name="age"/>
 </property>
<ont-to-ont name="com.mr.idcard.IDcard"
 cascade="all"/>
 </class>
</hibernate-mapping>

4、一對(duì)一外鍵關(guān)聯(lián)

這個(gè)配置比較簡(jiǎn)單 添加一個(gè)新字段即可 此處不再贅述

5、多對(duì)多關(guān)聯(lián)

多對(duì)多關(guān)聯(lián)比較特殊 需要另外的一張表來(lái)保存多對(duì)多的映射關(guān)系

<hibernate-mapping>
 <class name="com.mr.user.User" table="tab_user">
 <id name="id">
 <generator class="native"/>
 </id>
 <property name="name" not-null="true"/>
<set name="roles" table="tab_mapping">
<key column=""user_id"></key>
<many-to-many class="com.mr.role.Role" column="role_id"/>
</set>
</class>
</hibernate-mapping>

6、級(jí)聯(lián)操作

級(jí)聯(lián)操作指的是當(dāng)主控方執(zhí)行對(duì)數(shù)據(jù)表的更改時(shí),關(guān)聯(lián)對(duì)象是否進(jìn)行同步操作,在映射文件中通過(guò)對(duì)cascade屬性的設(shè)置決定是否對(duì)關(guān)聯(lián)對(duì)象采用級(jí)聯(lián)操作

all 所有情況下均采用級(jí)聯(lián)操作

none 默認(rèn)參數(shù) 所有情況下均不采用級(jí)聯(lián)操作

save-update 在執(zhí)行save-update方法時(shí)執(zhí)行級(jí)聯(lián)操作

delete 在執(zhí)行delete方法時(shí)執(zhí)行級(jí)聯(lián)操作

二、實(shí)體繼承關(guān)系映射

繼承是面向?qū)ο蟮闹匾匦?在Hibernate中是以面向?qū)ο蟮乃枷脒M(jìn)行持久化操作的,所以在Hibernate中數(shù)據(jù)表所映射的實(shí)體的對(duì)象也是可以存在繼承關(guān)系的 主要有以下三種

1、類繼承樹(shù)映射成一張表

學(xué)生和職員共同繼承了人的實(shí)體對(duì)象,也將擁有人的實(shí)體的對(duì)象的全部屬性 可以將這三個(gè)類映射到一張表中 添加一個(gè)字段來(lái)區(qū)分同名屬性

<hibernate-mapping package="com.mr.person">
 <class name="Person" table="tab_person">
 <id name="id">
 <generator class="native"/>
</id>
<discriminator column="type" type="string"/>
 <property name="name" not-null="true"/>
<property name="age" type="int"/>
perperty name="sex" type="string"/>
<subclass name="Studeng" discrimination-value="學(xué)生">
 <property name="school"/>
</subclass>
<subclass name="Staffer" discrimination-value="職員">
<property name="company"/>
</subclass>
</class>
</hibernate-mapping>

2、每個(gè)子類映射成一張表

上述的三個(gè)類也可以將每個(gè)子類映射成一張表 兩個(gè)子類映射的表都將通過(guò)主鍵關(guān)聯(lián)到超類映射的表,形成一對(duì)一的關(guān)系

<hibernate-mapping package="com.mr.person">
 <class name="Person" table="tab_person">
 <id name="id">
 <generator class="native"/>
</id>
<discriminator column="type" type="string"/>
 <property name="name" not-null="true"/>
<property name="age" type="int"/>
perperty name="sex" type="string"/>
<joined-subclass name="Student" table="tab_student">
<key column="id"/>
 <property name="school"/>
</joined-subclass>
<joined-subclass name="Staffer" discrimination-value="職員">
<key column="id"/>
</joined-subclass>
</class>
</hibernate-mapping>

3、每個(gè)具體類映射成一張表

將 每個(gè)具體類映射成一張表 每個(gè)子類的映射表中都含有繼承的父類屬性映射的字段

<hibernate-mapping package="com.mr.person">
 <class name="Person" abstract="true">
 <id name="id">
 <generator class="assigned"/>
</id>
<discriminator column="type" type="string"/>
 <property name="name" not-null="true"/>
<property name="age" type="int"/>
perperty name="sex" type="string"/>
<union-subclass name="Student" table="tab_student">
<key column="id"/>
 <property name="school"/>
</union-subclass>
<union-subclass name="Staffer" discrimination-value="職員">
<key column="id"/>
</union-subclass>
</class>
</hibernate-mapping>

三、Hibernate查詢語(yǔ)言

HQL(Hibernate Query Language)是完全面向?qū)ο蟮牟樵冋Z(yǔ)言,它提供了更加面向?qū)ο蟮姆庋b,它可以理解如多態(tài), 繼承和關(guān)聯(lián)的概念 HQL看上去與SQL相似 但它卻提供了更加強(qiáng)大的查詢功能

HQL是面向?qū)ο蟮牟樵冋Z(yǔ)言,所以它需要從目標(biāo)對(duì)象中查詢信息并返回匹配單個(gè)實(shí)體或多個(gè)實(shí)體對(duì)象的集合,而SQL語(yǔ)句是從數(shù)據(jù)庫(kù)中查找指定信息,返回的單條信息或多條信息的集合

所以HQL區(qū)分大小寫(xiě) 語(yǔ)法如下

select "對(duì)象.屬性名"
from "對(duì)象"
where "條件"
group by"對(duì)象.屬性名" having "分組條件"
order by "對(duì)象.屬性名"

實(shí)體對(duì)象查詢

from person
最好指定 一個(gè)別名 方便其他地方引用
from person per
此時(shí)返回的是person對(duì)象中的所有數(shù)據(jù)

查詢指定字段數(shù)據(jù)

select Person(id,name) from Person per

HQL參數(shù)綁定機(jī)制

參數(shù)綁定機(jī)制可以使查詢語(yǔ)句和參數(shù)具體值相互獨(dú)立,不但可以提高程序開(kāi)發(fā)效率,還可以有效的防止SQL的注入攻擊 HQL中有以下兩種方法

1:利用順序占位符?替代具體參數(shù)

session=HibernateUtil.getSession();
String sql="from Employee emp where emp.sex=?";
Query q=session.createQuery(hql);
q.setParameter(0,"男");
emplist=q.list();

2:利用占位符:parameter 替代具體參數(shù)

session=HibernateUtil.getSession();
String sql="from Employee emp where emp.sex=:sex";
Query q=session.createQuery(hql);
q.setParameter("sex","男");
emplist=q.list();

其余各種查詢與SQL基本一致 此處不再贅述

到此這篇關(guān)于JavaWeb Hibernate使用全面介紹的文章就介紹到這了,更多相關(guān)JavaWeb Hibernate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaWeb學(xué)習(xí)筆記分享(必看篇)

    JavaWeb學(xué)習(xí)筆記分享(必看篇)

    下面小編就為大家?guī)?lái)一篇JavaWeb學(xué)習(xí)筆記分享(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    這篇文章主要介紹了詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例的相關(guān)資料,這里對(duì)http的請(qǐng)求和響應(yīng)進(jìn)行詳細(xì)分析并附有實(shí)現(xiàn)實(shí)例,需要的朋友可以參考下
    2017-07-07
  • Java實(shí)現(xiàn)瀏覽器端大文件分片上傳

    Java實(shí)現(xiàn)瀏覽器端大文件分片上傳

    本文主要介紹了Java實(shí)現(xiàn)瀏覽器端大文件分片上傳,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 使用EasyPoi實(shí)現(xiàn)word文檔生成和段落循環(huán)

    使用EasyPoi實(shí)現(xiàn)word文檔生成和段落循環(huán)

    EasyPoi是一個(gè)Java的Excel和Word處理庫(kù),主要用于將Java對(duì)象轉(zhuǎn)換為Excel或Word文檔,本文主要介紹了如何使用EasyPoi實(shí)現(xiàn)word文檔生成和段落循環(huán),有需要的可以了解下
    2025-04-04
  • 詳解快速搭建Spring Boot+Spring MVC

    詳解快速搭建Spring Boot+Spring MVC

    本篇文章主要介紹了詳解快速搭建Spring Boot+Spring MVC,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java之如何正確地對(duì)包裝類進(jìn)行裝箱與拆箱

    Java之如何正確地對(duì)包裝類進(jìn)行裝箱與拆箱

    在這篇文章中給大家繼續(xù)講解包裝類的裝箱和拆箱問(wèn)題。你可能會(huì)很好奇,做java開(kāi)發(fā),怎么還裝起箱子來(lái)了?那么就請(qǐng)大家?guī)е苫笸驴窗?/div> 2023-04-04
  • 淺談java封裝

    淺談java封裝

    封裝封裝就是將屬性私有化,提供公有的方法訪問(wèn)私有的屬性。*實(shí)現(xiàn)封裝的步驟:(1)修改屬性的可見(jiàn)性來(lái)限制對(duì)屬性的訪問(wèn)。(2)為每個(gè)屬性創(chuàng)建一對(duì)賦值方法和取值方法,用于對(duì)這些屬性的訪問(wèn)。(3)在賦值和取值方法中,加入對(duì)屬性的存取限制。
    2015-03-03
  • MyBatisCodeHelperPro插件下載及使用教程詳解

    MyBatisCodeHelperPro插件下載及使用教程詳解

    這篇文章主要介紹了MyBatis CodeHelperPro插件使用教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • Java之定時(shí)器Timer和定時(shí)任務(wù)TimerTask應(yīng)用以及原理解讀

    Java之定時(shí)器Timer和定時(shí)任務(wù)TimerTask應(yīng)用以及原理解讀

    文章介紹了Java JDK自帶的定時(shí)器Timer和定時(shí)任務(wù)TimerTask的使用和原理,Timer和TimerTask成對(duì)出現(xiàn),Timer是定時(shí)器,TimerTask是定時(shí)任務(wù),TimerTask實(shí)現(xiàn)Runnable接口的run方法,Timer的屬性TimerThreadthread繼承Thread
    2024-12-12
  • Java同步容器和并發(fā)容器詳解

    Java同步容器和并發(fā)容器詳解

    這篇文章主要介紹了Java同步容器和并發(fā)容器詳解,容器是Java基礎(chǔ)類庫(kù)中使用頻率最高的一部分,Java集合包中提供了大量的容器類來(lái)幫組我們簡(jiǎn)化開(kāi)發(fā),下面小編和大家來(lái)一起學(xué)習(xí)下吧
    2019-06-06

最新評(píng)論

宁波市| 耒阳市| 永嘉县| 金寨县| 咸阳市| 连山| 阿拉尔市| 武义县| 乃东县| 综艺| 綦江县| 南丰县| 兴隆县| 德阳市| 安吉县| 郁南县| 通州市| 溧阳市| 桦川县| 宣恩县| 南溪县| 定日县| 阿瓦提县| 黄骅市| 孟村| 宝山区| 房产| 安义县| 金昌市| 哈巴河县| 响水县| 台州市| 盐池县| 新河县| 密云县| 舒兰市| 徐水县| 邵东县| 吉林市| 伊宁市| 荆门市|