手写 Hibernate ORM 框架 00-环境准备

news2024/9/9 0:25:08

手写框架

类似的还有其他系列,主要用于学习其中的原理。

Hibernate 属于比较早的框架了,后期将实现一套 mybatis。

手写 Hibernate 系列

手写 Hibernate ORM 框架 00-hibernate 简介

手写 Hibernate ORM 框架 00-环境准备

手写 Hibernate ORM 框架 01-注解常量定义

手写 Hibernate ORM 框架 02-实体 Bean 定义,建表语句自动生成

手写 Hibernate ORM 框架 03-配置文件读取, 数据库连接构建

手写 Hibernate ORM 框架 04-持久化实现

手写 Hibernate ORM 框架 05-整体效果测试验证

从零手写组件系列

java 从零手写 spring ioc 控制反转

java 从零手写 spring mvc

java 从零手写 jdbc-pool 数据库连接池

java 从零手写 mybatis

java 从零手写 hibernate

java 从零手写 rpc 远程调用

java 从零手写 mq 消息组件

java 从零手写 cache 缓存

java 从零手写 nginx4j

java 从零手写 tomcat

前言

Hibernate 相信接触过 java 的人都不会陌生。

今天我们一起写一个简化版的 Hibernate,用于加深对此 ORM 工具的理解。

代码地址

java 从零手写 hibernate

环境准备

  • maven

本项目使用 maven 管理 jar 包

  • jdk

jdk 为 1.8

pom.xml

依赖

pom 核心依赖如下:

<dependencies>
    <dependency>
        <groupId>com.github.houbb</groupId>
        <artifactId>heaven</artifactId>
    </dependency>
    <!--============================== OTHER ==============================-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--dom4j-->
    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
    </dependency>
</dependencies>

jar 包功能说明

名称作用备注
mysql-connector-java用于连接 mysql 数据库本项目以 mysql 为例子
dom4j用于模拟读取 hibernate.cfg.xml
junit用于单元测试

整体目录结构

便于鸟瞰整个项目

D:.                       
├─java                    
│  └─com                  
│      └─github           
│          └─houbb                   
│              └─hibernate           
│                  │  Session.java   
│                  │  Table.java     
│                  │                 
│                  ├─annotations     
│                  │      Column.java
│                  │      Entity.java
│                  │      GenerateValue.java
│                  │      Id.java
│                  │
│                  ├─constants
│                  │      HibernateConstant.java
│                  │      TypeMap.java
│                  │
│                  ├─model
│                  │      User.java
│                  │
│                  └─util
│                          CollectionUtil.java
│                          ConnectionUtil.java
│                          FieldUtil.java
│                          ReflectionUtil.java
│                          StringBuilderUtil.java
│                          StringUtil.java
│                          TableUtil.java
│
└─resources

小结

本文主要介绍了基本的依赖,和项目整体结构。

后续我们将用几节的文章,介绍一下如何实现一个简单版本的 hibernate

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

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

相关文章

攻防世界 re 新手模式 2

IgniteMe 32位无壳 一些简单信息&#xff0c;看关键函数 可以得到v7[i]的值 比较简单的逆向 #include<stdio.h> #include<string.h> int main() {char flag[40];char s[40];char str[]"GONDPHyGjPEKruv{{pj]XrF";char ch[] {0x0D, 0x13, 0x17, 0x11,…

AI到底有没有前景?到底要不要学习AI?

前言 在当今这个科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了一个热门话题。对于想要进入这一领域的学习者来说&#xff0c;心中难免会有一些疑问&#xff1a;“AI到底有没有前景&#xff1f;”、“我到底要不要学习AI&#xff1f;”、“我学…

Vue使用阿里巴巴字体

阿里巴巴字体使用效果 字体包下载 官方下载链接 解压字体文件到指定的文件夹 引用字体文件 我的是uniApp的项目&#xff0c;所以在公共css样式中引用这个字体文件 /*每个页面公共css */ font-face {font-family: "alimamFont";font-weight: 400;src: url("~/s…

Could not install packages due to an EnvironmentError: [WinError 5]

Could not install packages due to an EnvironmentError: [WinError 5] 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城…

WordPress原创插件:启用关闭经典编辑器和小工具

WordPress原创插件&#xff1a;启用关闭经典编辑器和小工具 主要功能 如图所示&#xff0c;用于启用或禁用经典编辑器和经典小工具&#xff0c;以替代Gutenberg编辑器。 插件下载 https://download.csdn.net/download/huayula/89592822

[Windows CMD] 检测网络连通性 ping

ping 是一个非常常用的网络工具&#xff0c;用于测试网络连接的可达性和测量网络延迟。它通过发送 ICMP (Internet Control Message Protocol) Echo Request 数据包到目标主机&#xff0c;并等待接收回显应答 (Echo Reply) 来工作。ping 命令可以帮助您快速检测网络问题&#x…

oracle 19c RAC-OracleLinux8.10安装19c遇到的问题

问题一&#xff1a; 操作系统是OracleLinux8.10 使用$ORACLE_HOME/gridSetup.sh -applyPSU /patch/36582629 安装集群正常&#xff0c;但安装数据库软件时 $ORACLE_HOME/runInstaller -applyPSU /patch/36582629报错&#xff0c;因赶工不使用applyPSU参数安装正常&#xff0c…

一款超实用的网络实时监控工具,助你轻松掌握 Docker 容器网络状态

1. 什么是 check-docker-connection check-docker-connection 主要用于监控 Docker 容器的网络连接情况。它可以显示指定容器的网络连接状态&#xff0c;包括 TCP 和 UDP 连接的数量。用户可以通过容器 ID 或名称来指定要监控的容器&#xff0c;或者指定显示连接数最多的前 N …

linux:用户管理,增删改

1.查看当前登录的用户信息 [root@bgx ~]# id #查看当前所登陆的用户信息 # uid:用户id,系统只能识别uid,不能识别名字,人看名字 # gid:组id uid=0(root) gid=0(root) groups=0(root) [root@bgx ~]# id oldboy #查看其它用户的信息 uid=1000(oldboy) gid=1000(oldboy) g…

【CTFHub】文件上传漏洞详解!

Webshell&#xff1a; 又称一句话木马。WebShell就是以网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、权限管理等操作。 WebShell根据不同的语言分为:ASP木马、PHP木马、JSP木马(上传解析类型取决于网站服务端编写语言类)&#xff0c;该类木马…

生成式人工智能的下一代基础设施是集群系统

GenAI 的存储和网络 本研究报告探讨了生成式人工智能 (GenAI) 在转变人工智能数据中心方面的关键作用。强调了存储和网络在支持人工智能/机器学习工作负载方面的重要性。 我们强调需要高容量、经济高效的存储&#xff0c;以处理不同数据处理阶段的不同 I/O 模式。 还讨论了检…

如何使用CANoe自带的TCP/IP Stack验证TCP的零窗口探测机制

如果想利用CANoe自带的TCP/IP协议栈验证TCP的零窗口探测机制,就必须添加一个网络节点并配置独立的CANoe TCP/IP协议栈,作为验证对象。而与它进行TCP通信的对端也是一个网络节点,但不要配置TCP/IP协议栈,而是使用CAPL代码在底层组装TCP报文模拟TCP通信过程。这样可以尽量减少…

项目实战_表白墙(简易版)

你能学到什么 一个比较简单的项目&#xff1a;表白墙&#xff08;简易版&#xff09;&#xff0c;浏览器&#xff1a;谷歌升级版将在下个博客发布 效果如下 正文 说明 我们是从0开始一步一步做这个项目的&#xff0c;里面的各种问题&#xff0c;我也会以第一人称视角来解…

国服最强文字转音频?Fish Speech

官网文档与示例 Fish Speech V1.2 是一款领先的文本到语音 (TTS) 模型&#xff0c;使用 30 万小时的英语、中文和日语音频数据进行训练。我尝试用1066运行&#xff0c;但是质量不尽如人意&#xff0c;建议使用RTX系列的显卡进行推理。 使用结果展示 text """20…

有哪些高性价比开放式耳机推荐?五大实力超群热门款分享

开放式耳机的优点包括不堵塞耳道&#xff0c;佩戴稳固性高&#xff0c;能较好的感知外界的声音等等&#xff0c;以上这些优势使得开放式耳机特别适配户外运动场景&#xff0c;在工作、日常生活等场景下使用也是绰绰有余。有哪些高性价比开放式耳机推荐&#xff1f;如果你还不知…

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器&#xff08;KY-036&#xff09; 具体讲解 这个比较简单&#xff0c;就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…

鸿蒙HarmonyOS开发:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

文章目录 一、装饰器二、概述三、限制条件四、装饰器说明五、Toggle组件1、子组件2、接口3、ToggleType枚举4、事件 六、示例演示1、代码2、效果 一、装饰器 State装饰器&#xff1a;组件内状态Prop装饰器&#xff1a;父子单向同步Link装饰器&#xff1a;父子双向同步Provide装…

大模型是如何“炼”成的?揭秘AI背后的训练秘籍!

在当今科技飞速发展的时代&#xff0c;大模型&#xff08;Large Language Models&#xff09;已成为人工智能领域的璀璨明星。它们如同经过精心雕琢的艺术品&#xff0c;能够处理各种复杂的任务。然而&#xff0c;这些大模型并非天生如此强大&#xff0c;它们需要经过严格的训练…

VScode | 我的常用插件分享

系列文章目录 本系列文章主要分享作位前端开发的工具之------VScode的使用分享。 文章目录 目录 系列文章目录 文章目录 前言 一、Vetur 三、别名路径跳转 四、Prettier 五、koroFileHeader 六、vue-helper 总结 前言 本文主要分享VScode的好用插件。 一、Vetur Vue的Vetur插…