首页 > 其他分享 >手写 Hibernate ORM 框架 05-基本效果测试

手写 Hibernate ORM 框架 05-基本效果测试

时间:2024-07-31 22:28:54浏览次数:11  
标签:Hibernate java 05 ORM user hibernate new 手写

手写 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

简介

java 从零实现简易版本的 hibernate

我们已经实现了 v0.1.0 版本,本节一起来验证一下效果。

核心特性

  • 简单版本的 hibernate

  • 建表语句生成+执行

  • 插入语句生成+执行

快速开始

需要

jdk1.3+

maven 3.x+

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>hibernate</artifactId>
    <version>0.1.0</version>
</dependency>

入门测试

环境准备

首先准备一个 mysql 对应的测试库 hibernate

mysql> create database hibernate;
Query OK, 1 row affected (0.00 sec)

mysql> use hibernate;
Database changed

配置信息

我们配置一下 hibernate.cfg.xml 为对应的数据库访问信息:

<?xml version='1.0' encoding='utf-8'?>
<hibernate-configuration>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
</hibernate-configuration>

建表语句

SQL 的生成:

Table table = new Table();
User user = new User();
System.out.println(table.buildCreateTableSQL(user));

结果为:

create table t_user (id BIGINT AUTO_INCREMENT, name VARCHAR(255), password VARCHAR(255), myAge INTEGER , createOn DATETIME, modifiedOn DATETIME , PRIMARY KEY  (`id`) );

执行建表

我们可以直接通过程序建表

Session session = new Session();
Table table = new Table();
User user = new User();

Connection connection = session.createConnection();
PreparedStatement preparedStatement = connection.prepareStatement(table.buildCreateTableSQL(user));
preparedStatement.execute();

执行后:

mysql> show tables;
+---------------------+
| Tables_in_hibernate |
+---------------------+
| t_user              |
+---------------------+
1 row in set (0.00 sec)

表结构

mysql> desc t_user;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | YES  |     | NULL    |                |
| password   | varchar(255) | YES  |     | NULL    |                |
| myAge      | int(11)      | YES  |     | NULL    |                |
| createOn   | datetime     | YES  |     | NULL    |                |
| modifiedOn | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

PS: 这里可以看到对应的字段没有驼峰转下划线

数据的插入

插入语句

User user = new User();
user.setId(3L);
user.setName("ryo");
user.setAge(21);
user.setPassword("123456");
user.setCreateOn(new Date());
user.setModifiedOn(new Date());
System.out.println(new Session().buildInsertSQL(user));

结果为:

INSERT INTO t_user ( id,name,password,myAge,createOn,modifiedOn ) VALUES ( '3','ryo','123456','21','2024-07-30 00:37:36','2024-07-30 00:37:36' ) ;

程序插入

也可以程序直接插入

User user = new User();
user.setId(3L);
user.setName("ryo");
user.setAge(21);
user.setPassword("123456");
user.setCreateOn(new Date());
user.setModifiedOn(new Date());

new Session().save(user);

效果

mysql> select * from t_user;
+----+------+----------+-------+---------------------+---------------------+
| id | name | password | myAge | createOn            | modifiedOn          |
+----+------+----------+-------+---------------------+---------------------+
|  3 | ryo  | 123456   |    21 | 2024-07-30 00:38:14 | 2024-07-30 00:38:14 |
+----+------+----------+-------+---------------------+---------------------+
1 row in set (0.00 sec)

ROAD-MAP

标签:Hibernate,java,05,ORM,user,hibernate,new,手写
From: https://www.cnblogs.com/houbbBlogs/p/18335640

相关文章

  • Visual Studio 2022 WinForm/Wpf打包安装程序
     VisualStudio2022WinForm/Wpf打包安装程序1.安装扩展程序2.创建并设置用于打包安装程序的项目2.1新建SetupProject项目2.2添加需要打包的应用程序文件2.3添加项目主程序2.3添加主程序的桌面和任务栏快捷方式2.5添加卸载程序2.6添加卸载程序快捷方式2.7......
  • NIS(Network Information Services)服务端在R系部署,客户端rpm,deb简单使用
    #!/bin/bash####@Author:[email protected]#@Date:2024-05-28#@LastEditors:[email protected]#@LastEditTime:2024-07-19#@FilePath:NIS-use.sh#@Description:NIS(NetworkInformationServices)source:https://www.th......
  • STAT3006/7305 STAT3006/7305  covariance matrix
    STAT3006/7305Tutorial 11. Assumeis bivariate normal with meanand covariance matrixDeriveanexpressionforthemarginaldistributionofX1 .2. Forthe aboveproblem, derive anexpressionfor the conditional distribution of X1 fromthe......
  • OpenAI发布PVG:用小模型验证大模型输出解决“黑盒”难题,韩国团队拆分Transformer注意力
    OpenAI发布PVG:用小模型验证大模型输出解决“黑盒”难题,韩国团队拆分Transformer注意力让大模型解码提速20倍,微软、OpenAI、英特尔、谷歌、英伟达,成立开源大模型安全联盟。在今年的7月11日,全球著名开源大模型分享平台HuggingFace与专业数学大模型平台Numina合作,共同角逐AI......
  • express开发api指南--集成ORM(prisma)
    9.1安装依赖#全局安装prismacnpminstallprisma-g#添加开发依赖cnpminstallprisma--save-dev#创建Prisma架构文件模板,设置PrismaORM项目npxprismainit#安装并生成PrismaClientcnpminstall@prisma/client-gcnpminstall@prisma/client--save9.2连......
  • 【STM32 HAL库】HC-05 蓝牙通信
    【STM32HAL库】蓝牙通信理论模块功能接线应用CubeMX配置轮询模式发送DMA模式发送Keil5代码理论模块功能将复杂的蓝牙协议简化为串口透传即以HC-05作为串口与主机之间通信的桥梁,实现串口与主机的通信本质上就是无线的串口通信接线HC-05STM32TXRXRXTXGNDGNDV......
  • 数组加密问题例题day05
    importjava.util.Scanner;/* 某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换......
  • 海信IP105H 47TG0/50TG0_湖北电信高安版_S905L3B_当贝桌面线刷固件包
    海信IP105H47TG0/50TG0_湖北电信高安版_S905L3B_当贝桌面线刷固件包  线刷方法:(新手参考借鉴一下)1、准备好一根双公头USB线刷刷机线,长度30-50CM长度最佳,同时准备一台电脑,拆开盒子;2、电脑上安装好刷机工具AmlogicUSBBurningTool软件→打开软件→文件→导入烧录包......
  • Solution - Atcoder AGC052B Tree Edges XOR
    令\(w_{(u,v)}\)为边\((u,v)\)的边权。考虑到对于一条边进行操作影响的是有公共点的边,于是一个想法是把边权转到点权,用点权来表示边权。于是考虑对于每个点构造\(w_u\)使得\(w_{(u,v)}=w_u\oplusw_v\)。因为这是一颗树,所以一定存在合法的构造。其实到了这里,这种......
  • 界面控件DevExpress WinForms,支持HTML & CSS提升用户体验(一)
    DevExpressWinForms现在可以利用HTML/CSS强大的功能,帮助受DevExpress驱动的WinForms应用程序引入现代的UI元素和用户体验!P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应......