当前位置: 首页 > news >正文

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

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

  • 添加基于 gen-case 的测试用例

  • 建表对应的字段没有驼峰转下划线

  • CRUD

  • list 等常见查询

http://www.lryc.cn/news/411692.html

相关文章:

  • Unity材质球自动遍历所需贴图
  • C++那些事之结构化绑定
  • ECRS工时分析软件:工业工程精益生产的智慧引擎
  • 大语言模型的核心岗位及其要求
  • 【屏驱MCU】RT-Thread 文件系统接口解析
  • 进程管理工具top ps
  • 2年社招冲击字节,一天三面斩获offer
  • oppo,埃科光电25届秋招,快手25届技术人才专项计划等几千家企业岗位内推
  • 【Vulnhub系列】Vulnhub Lampiao-1 靶场渗透(原创)
  • MySQL:ORDER BY 排序查询
  • UML类图 详解
  • 【IEEE出版 | 高录用率 | 快速检索 | 有ISBN号!】2024年智能计算与数据挖掘国际学术会议 (ICDM 2024,9月20-22)
  • DaoCloud配置不同环境的流水线(Q)
  • 基础的Shell命令
  • 量子仿真speedUp的经验
  • 电测量数据交换DLMS∕COSEM组件第61部分:对象标识系统(OBIS)(下)
  • 【Java】重生之String类再爱我一次---练习题(012)
  • NSSCTF-GDOUCTF 2023新生赛
  • 论文解析——Character Region Awareness for Text Detection,字符级文本检测CRAFT算法
  • 基于飞腾平台的Kafka移植与安装
  • 【Python数据结构与算法】递归----算24
  • TOSHIBA东芝代理商--芯智雲城,提供订货、报价、选型等服务!
  • sdwan
  • Linux: network: 建立socket以及设置nonblock/opt所需的时间
  • git使用及代码规范
  • 职业教育大数据实验实训室建设应用案例
  • 【Academy】反序列化漏洞Insecure deserialization
  • 【轨物推荐】康波、世界体系与创新范式:中国如何引爆新一轮产业革命
  • [HCTF 2018]admin1
  • 【Qwen-Audio部署实战】Qwen-Audio-Chat模型之对话机器人部署测试