02. Hibernate 初体验之持久化对象

1. 前言

本节课程让我们一起体验 Hibernate 的魅力!编写第一个基于 Hibernate 的实例程序。

在本节课程中,你将学到 :

  • Hibernate 的版本发展史;
  • 持久化对象的特点。

为了更好地讲解这个内容,这个初体验案例分上下 2 个章节来讲解。

2. Hibetnate 体系结构

如图可知,应用程序可以通过 Hibernate 为用户提供的接口 API 通知 Hibernate 内部组件对数据库中数据进行一系列操作。

在操作之前,先做些准备工作。

3. 使用 Hibernate 编写第一个程序

3.1 持久化对象

Hibernate 是以 Java 面向对象编程的方式操作数据库。使用之前先要定义一个对象,这个对象叫持久化对象。

为什么叫持久化对象?不急!一步步来,慢慢掀起它神秘面纱。

先一起来看看这个持久化对象的定义。这个所谓的持久化对象长得和普通的 Java 对象没有什么不同:

文章中淡化了对象和类的区别。

public class Student {//学生编号private Integer stuId;//学生姓名private String stuName;//此处省略其它属性……public Student(){super();}public Student(Integer stuId,String stuName){this.stuId=stuId;this.stuName=stuName;//省略代码……}//省略各种get set方法
}  

关于这个对象定义有几点需要说明:

  • 这个类的结构需要对应关系型数据库中某一张表的表结构
  • 可用类中的属性封装表中对应字段数据(数据类型保持一致);
  • 所有属性提供 get 和 set 方法,类定义中提供一个无参的构造方法。且不要在这个类中提供任何业务逻辑代码。是的!这是一个符合 JavaBean 规范的普通 Java 类(POJO)

你定义的,你心里知道。但是,Hibernate 不知道这个类是干嘛用!

所以,你必须通过元数据说明告诉 Hibernate

  • 这个类结构对应那个表结构
  • 这个类的属性对应表中的那个字段(还需附加类型说明等 N 多信息)

加上元数据说明,这样,Hibernate 就能够使用这个对象操作数据中的数据了!

智能化是有前提条件的!Hibernate 再聪明也需要指引!

此时这个 POJO (普通 Java 类 POJO : Plain Ordinary Java Object,不包含业务逻辑代码的值对象)对象可换上一个更贴切的名字:持久化对象(PO:persistent object)

你也应该要小结一下: PO = POJO + 元数据说明

此处稍加提醒下,元数据说明方法有两种:

  • XML;
  • 注解。

3.2 XML 映射

现在流行使用注解方式告诉 Hibernate 你操作的对象对应数据库中的那张表及更多关联信息。

对 XML 映射大家也需要了解一下,万一你以后工作的企业里有一群怀旧的叔叔呢!

本章节中的案例使用 XML 映射方式,后面的内容讲解还是要跟上潮流,使用注解方式

命名为 Student.hbm.xml 文件中部分内容如下 (完整的文档结构说明可查看官方文档):

<Hibernate-mapping><class name="com.po.Student" table="student" schema="scott" ><id  name="stuId" type="java.lang.Integer"><column name="stuId" precision="11" scale="0" /><generator class="increment"></generator></id><property name="stuName"  type="java.lang.String"><column name="stuName" length="20" unique="true" /></property><!--其它属性映射--></class>
</Hibernate-mapping>

上面这个 XML 文件中的内容,语义上非常明确。为了加深理解,再解释一下 Xml 中相应元素:

  • class: 类与表的映射关系;
  • id: 类中的那个属性对应表中的主键字段,只能有一个。这个属性也可叫做标识属性
  • property: 通过子元素 column 一起说明类中的其它属性分别对应表中的那个字段,可以有多个。

通过 XML 元素属性或子元素所提供的附加信息越多,就可以让 Hibernate 清晰地明白自己的任务,否则某些环节它就要靠猜了!

编码规范提示: 尽可能保持 Java 类中属性命名和表中字段命名相同!

有了前面的工作。已经足够让 Hibernate 在进入数据库系统时生成正确的 SQL 语句,也足够让 Hibernate 把从数据库中带出来的数据映射成正确 Java 对象。

4. 主配置文件

何谓主配置文件?其作用是什么?
一句话概括:为 Hibetnater 的数据库操作工作做行程计划。
如:

  • 指定访问的具体数据库,串门可别窜岔了;
  • 操作时依赖的映射文件在那里;
  • 在操作过程其它一系列设置安排。

也可以说,开发者可以通过此文档和 Hibernate 的内部组件进行互动。 Hibetnate.cfg.xml 是主配置文件的默认命名,当然,你可以改成其它名称!

好吧,现在通过此文件告诉 Hibernate 两个信息:

  1. 你要远行的地方叫 MySql (本课程选用 MySql 为项目数据库);
  2. 你要依赖的映射文件叫 Student.hbm.xml
<hibernate-configuration><session-factory><!-- 访问MySql数据库的基本连接信息 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property : name="connection.url">jdbc:mysql://localhost:3306/myhibernate</property><property name="connection.username">root</property><property name="connection.password">abc123</property><!— 数据库连接池会在后面讲解,这里先给自己一个预习机会--><property name="connection.pool_size">1</property><!-- SQL 方言 --><property name="dialect">org.hibernate.dialect.HSQLDialect</property><!-- 是否显示Hibetnate自动生成的SQL语句 --><property name="show_sql">true</property><!—映射文件的位置--><mapping resource="com/mk/po/Student.hbm.xml"/></session-factory>
</hibernate-configuration>

文件中的内容一目了然,有几点需要强调说明:

  • 数据源的目的是告诉 Hibetnate 去哪家关系数据库中获取数据。配置时一般会涉及到数据库连接池,可先作为自己预习内容,此章节不讲;

  • dialect 方言如同大家都讲普通话,因出生地区域不同,普通话中或多或少都会有本地方言。SQL 是关系数据系统的统一语言,每一种具体的关系数据库产品中的 SQL 语句也有稍许差异性。此处告诉 Hibetnate 在生成 SQL 语句时要入乡随俗,注意语法上的细节差异;

  • 其它配置内容可根据开发过程的需求逐一添加。

其实不难,如果你觉得难,对于想让你工作变得简单的 Hibernate 而言就会觉得很伤心!

当然,你也不能指望 Hibetnate 是你心里的蛔虫,在 Hibernate 工作之前与之交流环节是必不可少的。

5. 小结

本节课内容先讲到这里!知识需要消化时间。

本节课程,让大家了解了 Hibernate 进行数据库操作的关键是什么!在心里反复地默念一下:

持久化对象是一个 Java 对象牵手元数据说明信息,目的是帮助 Hibernate 明白进入数据库系统的任务(生成增、删、改、查相应操作的 SQL 语句)、以及正确完成数据(关系型数据)到数据(Java OOP 数据)的映射。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go-高效处理应用程序数据

一、背景 大型的应用程序为了后期的排障、运营等&#xff0c;会将一些请求、日志、性能指标等数据保存到存储系统中。为了满足这些需求&#xff0c;我们需要进行数据采集&#xff0c;将数据高效的传输到存储系统 二、问题 采集服务仅仅针对某个需求开发&#xff0c;需要修改…

防火墙小试——部分(书接上回)

toop接上回 1.实验拓扑及要求 前情回顾 DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00 - 18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问. 生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 …

C#统一委托Func与Action

C#在System命名空间下提供两个委托Action和Func&#xff0c;这两个委托最多提供16个参数&#xff0c;基本上可以满足所有自定义事件所需的委托类型。几乎所有的 事件 都可以使用这两个内置的委托Action和Func进行处理。 Action委托&#xff1a; Action定义提供0~16个参数&…

使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体

本文目录 一、引言二、开发准备三、代码开发四、使用亮数据进行高效爬取4.1 为什么需要亮数据4.2 如何使用亮数据 五、使用数据训练AI智能体六、 总结 一、引言 在当今AI迅速发展的时代&#xff0c;招聘市场正经历着前所未有的变革。传统的招聘方式已难以满足双方的需求。AI智…

canvas快速入门(一)canvas的基础使用

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1. canvas的两种创建方式及优劣 2. canvas宽高设置及注意事项 3. 简单测例 项目结构&#xff1a; 源码&#xff1a; index.html <!DOCTYPE html> <html lang"en"> <head><meta charset…

先天睡功-守一老师

描述 守一老师&#xff0c;一个富有才华的老师&#xff01; 对于大家的学习有不可多得的帮助。 内容 目前主要的内容以睡觉为主&#xff0c;对于学习睡睡觉有比较大的帮助&#xff01; 但是网络上面错综复杂&#xff0c;很多老旧的版本影响学习&#xff01; 而这里我整理了…

安全防御实验2

一、实验拓扑 二、实验要求 办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换)分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器多出口环境基于带宽比例进行选路&#xff0c;但是&#xff0c;办公区…

OZON夏季热卖产品有哪些,OZON夏季热卖新品

OZON平台在夏季的热卖产品种类繁多&#xff0c;涵盖了多个领域&#xff0c;主要包括但不限于以下几个方面&#xff0c;接下来看看OZON夏季热卖产品有哪些&#xff0c;OZON夏季热卖新品&#xff01;Top1 运动套装 Костюм спортивный Victorias Secret 商品id…

【C++】C++入门实战教程(打造属于自己的C++知识库)

目录 目录 写在前面 1.C学习路线 2.本教程框架介绍 一.C基础部分 1.程序编码规范 2.程序运行与编译 3.关键字 4.常用数据类型 5.运算符相关 二.C进阶部分 1.面向对象编程 2.函数编程 3.模板编程 4.多线程与并发 5.STL介绍及使用 6.内存模型与优化 三.C实战部…

美国视觉AI解决方案公司Hayden AI完成9000万美元C轮融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国加利福尼亚州旧金山弗朗西斯科专门为智慧城市提供视觉AI解决方案的Hayden AI&#xff0c;近期宣布已完成9000万美元C轮融资。 本轮融资由The Rise Fund领投&#xff0c;Drawdown Fun…

股指期货存在的风险有哪些?

股指期货因其标的物的特殊性&#xff0c;其面临的风险类型十分复杂&#xff0c;主要面临的一般风险和特有风险如下&#xff1a; 一般风险 从风险是否可控的角度&#xff0c;可以划分为不可控风险和可控风险&#xff1b;从交易环节可分为代理风险、流动性风险、强制平仓风险&…

BUCK外围器件选型,输入电容,输出电容,电感,续流二极管

概述&#xff1a; 一般情况下&#xff0c;电源接口处会有大小不同的电容进行并联&#xff0c;大容量电容是为了防止自身产生干扰影响其他器件&#xff0c;所以叫去耦电容&#xff1b;小容量电容是为了其他高频干扰影响自身&#xff0c;所以叫旁路电容。当然这只是通常情况下。 …

深入剖析多个表left join on的执行步骤原理:实战案例解析与原理探讨

文章目录 文章导图前言初始化数据-建表两个表left jion多表-left jion on c.bidb.bid分析|执行步骤和结果理解 变形-修改c表数据变形1变形2 总结 多表-left jion on c.aida.aid分析执行步骤和结果理解 变形-修改c表数据变形1变形2 解答开头总结 Left join on系列文章测试一下你…

​Chrome 插件: GoFullPage 一键搞定全网页截图

在互联网时代&#xff0c;网页截图已成为我们日常工作和生活中不可或缺的部分。无论是保存重要信息、制作教程&#xff0c;还是分享有趣的内容&#xff0c;截图功能都显得尤为重要。然而&#xff0c;常规的截图工具往往只能截取当前屏幕的内容&#xff0c;对于长网页则显得力不…

做个简单的知识付费网站需要什么方式

网站是线上承载信息宣传的主要工具之一&#xff0c;也是企业公司发展的重要工具之一&#xff0c;除了固定信息呈现外&#xff0c;还有不少商家具备各种方式的干货输出能力&#xff0c;或者想以内容售卖获得一定营收。 如教培机构、自媒体、网校、知识生产者、领域达人等都具备…

【unity笔记】九、Unity添加串口通信

unity仿真使用虚拟串口调试。下面为简单流程。 常用串口调试软件在这里下载。 1.虚拟串口 添加虚拟串口&#xff0c;这里使用com1 com2 2. 串口调试 在这里为虚拟串口发送消息。 3. unity配置 3.1 设置 在文件->生成设置->玩家设置->玩家->其他设置 中找到…

【机器学习】逻辑回归的原理、应用与扩展

文章目录 一、逻辑回归概述二、Sigmoid函数与损失函数2.1 Sigmoid函数2.2 损失函数 三、多分类逻辑回归与优化方法3.1 多分类逻辑回归3.2 优化方法 四、特征离散化 一、逻辑回归概述 逻辑回归是一种常用于分类问题的算法。大家熟悉的线性回归一般形式为 Y a X b \mathbf{Y}…

初学SpringMVC之 JSON 篇

JSON&#xff08;JavaScript Object Notation&#xff0c;JS 对象标记&#xff09;是一种轻量级的数据交换格式 采用完全独立于编程语言的文本格式来存储和表示数据 JSON 键值对是用来保存 JavaScript 对象的一种方式 比如&#xff1a;{"name": "张三"}…

「Pytorch」roLabelImg 图像异常旋转 bug

在进行Yolo-obb 模型训练的时候需要标注旋转框&#xff0c;roLabelImg 是比较推荐的一款旋转框标注工具&#xff0c;既可以标注正常的矩形框&#xff0c;还可以标注旋转框 roLabelImg Github 地址&#xff1a;https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…

SpringCloud学习

认识微服务 1.单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署 优点&#xff1a;架构简单 部署成本低 缺点&#xff1a;耦合度高 2.分布式架构&#xff1a;根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&…