iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JavaWeb Hibernate使用全面介绍
  • 208
分享到

JavaWeb Hibernate使用全面介绍

JavaWeb HibernateJavaWeb Hibernate框架 2022-11-13 18:11:06 208人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、实体关联之间的映射1、单向多对一的关联2、多对一双向关联3、一对一主键关联4、一对一外键关联5、多对多关联6、级联操作二、实体继承关系映射1、类继承树映射成一张表2、每个

前言

以下内容科班同学学过UML和数据库的应该比较熟悉

数据模型:数据模型是对数据库特征的抽象,也就是用户从数据库中看到的模型,例如一张数据表或者用户从数据表中所看到的存储信息,此模型既要面向对象又要面向系统

领域模型:领域模型是对现实世界中的对象的可视化表现,又称为概念模型,领域模型或者分析对象模式,没有所谓唯一正确的领域模型,所有模型都是对我们试图要理解的领域的近似,领域模型主要是在特定群体用于理解和沟通的工具

一、实体关联之间的映射

接下来的内容与数据库中的ER图映射成关系表十分相似

1、单向多对一的关联

两个类映射成表,并且把被关联表的主键作为关联表的外键

<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、多对一双向关联

以任一个表的主键作另一个表的外键都可以

<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、一对一主键关联

指的是两个表之间通过主键形成一对一的映射

<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、一对一外键关联

这个配置比较简单 添加一个新字段即可 此处不再赘述

5、多对多关联

多对多关联比较特殊 需要另外的一张表来保存多对多的映射关系

<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、级联操作

级联操作指的是当主控方执行对数据表的更改时,关联对象是否进行同步操作,在映射文件中通过对cascade属性的设置决定是否对关联对象采用级联操作

all 所有情况下均采用级联操作

none 默认参数 所有情况下均不采用级联操作

save-update 在执行save-update方法时执行级联操作

delete 在执行delete方法时执行级联操作

二、实体继承关系映射

继承是面向对象的重要特性 在Hibernate中是以面向对象的思想进行持久化操作的,所以在Hibernate中数据表所映射的实体的对象也是可以存在继承关系的 主要有以下三种

1、类继承树映射成一张表

学生和职员共同继承了人的实体对象,也将拥有人的实体的对象的全部属性 可以将这三个类映射到一张表中 添加一个字段来区分同名属性

<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="学生">
 <property name="school"/>
</subclass>
<subclass name="Staffer" discrimination-value="职员">
<property name="company"/>
</subclass>
</class>
</hibernate-mapping>

2、每个子类映射成一张表

上述的三个类也可以将每个子类映射成一张表 两个子类映射的表都将通过主键关联到超类映射的表,形成一对一的关系

<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、每个具体类映射成一张表

将 每个具体类映射成一张表 每个子类的映射表中都含有继承的父类属性映射的字段

<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查询语言

HQL(Hibernate Query Language)是完全面向对象的查询语言,它提供了更加面向对象的封装,它可以理解如多态, 继承和关联的概念 HQL看上去与sql相似 但它却提供了更加强大的查询功能

HQL是面向对象的查询语言,所以它需要从目标对象中查询信息并返回匹配单个实体或多个实体对象的集合,而SQL语句是从数据库中查找指定信息,返回的单条信息或多条信息的集合

所以HQL区分大小写 语法如下

select "对象.属性名"
from "对象"
where "条件"
group by"对象.属性名" having "分组条件"
order by "对象.属性名"

实体对象查询

from person
最好指定 一个别名 方便其他地方引用
from person per
此时返回的是person对象中的所有数据

查询指定字段数据

select Person(id,name) from Person per

HQL参数绑定机制

参数绑定机制可以使查询语句和参数具体值相互独立,不但可以提高程序开发效率,还可以有效的防止SQL的注入攻击 HQL中有以下两种方法

1:利用顺序占位符?替代具体参数

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

2:利用占位符:parameter 替代具体参数

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

其余各种查询与SQL基本一致 此处不再赘述

到此这篇关于javaweb Hibernate使用全面介绍的文章就介绍到这了,更多相关JavaWEB Hibernate内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaWeb Hibernate使用全面介绍

本文链接: https://www.lsjlt.com/news/170259.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaWeb Hibernate使用全面介绍
    目录前言一、实体关联之间的映射1、单向多对一的关联2、多对一双向关联3、一对一主键关联4、一对一外键关联5、多对多关联6、级联操作二、实体继承关系映射1、类继承树映射成一张表2、每个...
    99+
    2022-11-13
    JavaWeb Hibernate JavaWeb Hibernate框架
  • hibernate 常用方法介绍
    一、hibetnateTemplate常用方法1、delete(Object entity) 删除指定的持久化实例在程序中一般先用    Assert....
    99+
    2022-11-15
    hibernate
  • SpringCloud Eureka应用全面介绍
    目录Eureka什么是服务治理什么是服务注册与发现Eureka的两大组件Eureka的使用Eureka服务端server的创建Eureka客户端client的创建集群搭建Eureka...
    99+
    2024-04-02
  • Java@SentinelResource全面介绍
    目录按资源名称限流加后续处理按照Url地址限流加后续处理客户自定义限流处理逻辑按资源名称限流加后续处理 Module:cloudalibaba-sentinel-service840...
    99+
    2024-04-02
  • JavaWeb中ServletContext的介绍和应用
    本篇内容主要讲解“JavaWeb中ServletContext的介绍和应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaWeb中ServletContext的介绍和应用”吧!目录获取we...
    99+
    2023-06-20
  • Java全面系统介绍反射的运用
    目录反射反射定义反射的基本运用1.获取类对象a.forName()方法b.直接获取c.getClass()方法d.getSystemClassLoader().loadClass()...
    99+
    2024-04-02
  • Java shiro安全框架使用介绍
    目录1.shiro安全框架1.1 什么是权限管理1.2 什么是身份认证1.3 什么是授权1.4 认证授权框架有哪些2.使用shiro完成认证工作2.1 shiro中认证的关键对象2....
    99+
    2024-04-02
  • apt源配置详细全面介绍
    0. 引言 由于 apt-get 获取的应用来自于国外,往往下载速度极慢,因此部分公司、学校将部分或所有软件的更新同步到自己的服务器,这些软件包下载来源就是国内的源。由于不同源同步的软件不一定完全相...
    99+
    2023-09-04
    ubuntu 服务器 linux
  • ReactHooks使用方法全方位介绍
    目录hooks介绍useState(保存组件状态)useEffect()useCallback(记忆函数)useMemo(记忆组件)useRef(保存引用值)useReducerus...
    99+
    2023-03-19
    React Hooks React Hooks方法
  • Django框架:一个全面的介绍
    Django框架:一个全面的介绍 Django是Python中最受欢迎和使用广泛的Web开发框架之一。它是一个强大的、高效的、自由的开源造架构,可以帮助Web开发人员快速构建高质量的Web应用程序。通过Django,开发人员可以...
    99+
    2024-01-19
    框架 django 全面
  • SpringBoot日志配置操作全面介绍
    目录日记基础操作设置包的级别设置日志分组使用lombok中@Slf4j简化日志输出日志输出格式控制文件记录日志设置日志文件日志文件详细配置日记基础操作 编程期调试代码 运营期记录信息...
    99+
    2022-11-13
    SpringBoot日志配置 SpringBoot日志设置 SpringBoot日志
  • 怎样全面介绍Linux终端命令
    这期内容当中小编将会给大家带来有关怎样全面介绍Linux终端命令,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。这里介绍一些Linux终端命令,大家一定要熟记这些终端命令,会省去很多的查找这些命令用法的时间...
    99+
    2023-06-16
  • XP桌面文字技巧使用介绍
    ★其实还可以按住Alt键,然后在小键盘输入“0160”,这样也可以达到同样效果。 ★若找不到内码输入法,可右击输入法切换图标选择“设置”,再单击“添加&rdqu...
    99+
    2023-06-01
    XP桌面 文字技巧 技巧 桌面 XP
  • SpringCloud hystrix断路器与全局解耦全面介绍
    第七章中在ProductController 和OrderController 中都使用了局部服务降级,但同时也导致两个问题, 通过观察两个局部降级的案例,可以发现: 每个业务方法都...
    99+
    2022-11-13
    SpringCloud hystrix断路器 SpringCloud hystrix服务降级
  • ZookeeperZkClient使用介绍
    目录前言1、创建会话2、创建节点3、删除节点4、获取子节点5、获取数据(节点是否存在、更新、删除)前言 接下来,还是从创建会话、创建节点、读取数据、更新数据、删除节点等方面来介绍如何...
    99+
    2024-04-02
  • MinIO介绍使用
    MinIO介绍使用 MinIO 介绍 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。 MinIO 英文官网 MinIO 中文官网 注意:中...
    99+
    2023-09-02
    docker linux java
  • GoLangchannel使用介绍
    目录停止信号任务定时解耦生产方和消费方控制并发数停止信号 channel 用于停止信号的场景还是挺多的,经常是关闭某个 channel 或者向 channel 发送一个元素,使得接收...
    99+
    2024-04-02
  • SpringBeanDefinition使用介绍
    目录1. 前言2. BeanDefinition2.1 AttributeAccessor2.2 BeanMetadataElement2.3 BeanDefinition2.4 A...
    99+
    2023-01-04
    Spring BeanDefinition作用 Spring BeanDefinition
  • JS.findElementById()使用介绍
    复制代码 代码如下: his.findElementById = function (identifier, frame) { if (!frame) { frame = windo...
    99+
    2022-11-15
    findElementById
  • puppet介绍、使用
    Puppet是一个自动化配置管理工具,可以帮助管理和部署大规模的计算机系统和网络设备。它允许用户通过定义所需的系统状态和配置,然后自...
    99+
    2023-09-23
    puppet
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作