Hibernate - Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系

article/2025/10/28 21:32:26

【1】常见的映射关系表

常见的映射对应关系如下表所示:

Hibernate映射类型Java类型标准SQL类型字节大小
integer/intjava.lang.Integer/intINTEGER4Byte
longjava.lang.Long/longBIGINT8Byte
shortjava.lang.Short/shortSMALLINT2Byte
bytejava.lang.Byte/byteTINYINT1Byte
floatjava.lang.Float/floatFLOAT4Byte
doublejava.lang.Double/doubleDOUBLE8Byte
big_decimaljava.math.BigDecimalNUMERIC
characterjava.lang.Character/java.lang.String/charCHAR定长字符
stringjava.lang.StringVARCHAR变长字符
boolean/yes_no/true_falsejava.lang.Boolean/booleanBIT布尔类型
datejava.util.Date/java.sql.DateDATE日期
timejava.util.Date/java.sql.TimeTIME时间
timestampjava.util.Date/java.util.TimestampTIMESTAMP日期
calendarjava.util.CalendarTIMESTAMP日期
calendar_darjava.util.CalendarDATE日期
binarybyte[]BLOBBLOB
textjava.lang.StringCLOBCLOB
serializable实现java.io.Serializable接口的任意Java类BLOBBLOB
clobjava.sql.ClobCLOBCLOB
blobjava.sql.BlobBLOBBLOB
classjava.lang.ClassVARCHAR定长字符
localejava.util.LocaleVARCHAR定长字符
timezonejava.util.TimeZoneVARCHAR定长字符
currencyjava.util.CurrencyVARCHAR定长字符

【2】Java时间和日期类型的Hibernate映射

在 Java 中, 代表时间和日期的类型包括: java.util.Date 和 java.util.Calendar。

此外, 在 JDBC API 中还提供了 3 个扩展了 java.util.Date 类的子类: java.sql.Date, java.sql.Time 和 java.sql.Timestamp, 这三个类分别和标准 SQL 类型中的 DATE, TIME 和 TIMESTAMP 类型对应。

因此在Java类中通常都将Date类型设置为java.util.Date。

在这里插入图片描述

在标准 SQL 中, DATE 类型表示日期, TIME 类型表示时间, TIMESTAMP 类型表示时间戳, 同时包含日期和时间信息。

映射类型Java类型标准SQL类型描述(java中表示)
datejava.util.Date/java.sql.DateDATE日期:yyyy-MM-dd
timejava.util.Date/java.sql.TimeTIME时间 :HH:mm:ss
timestampjava.util.Date/java.util.TimestampTIMESTAMP日期和时间:yyyy-MM-dd HH:mm:ss
calendarjava.util.CalendarTIMESTAMP同上
calendar_darjava.util.CalendarDATE日期:yyyy-MM-dd

如何把java.util.Date映射为DATE , TIME和TIMESTAMP?

一个 Java 类型可能对应多个 Hibernate 映射类型。 例如: 如果持久化类的属性为 java.util.Date 类型, 对应的 Hibernate 映射类型可以是 date, time 或 timestamp。

此时可以根据对应的数据表的字段的 SQL 类型, 来确定 Hibernate 映射类型。

如果字段为 DATE 类型, 那么 Hibernate 映射类型为 date; 如果字段为 TIME 类型, 那么 Hibernate 映射类型为 time; 如果字段为 TIMESTATMP 类型, 那么 Hibernate 映射类型为 timestamp。

当然也可以在XML中显示指定Hibernate映射类型如下所示:

 <property name="date" type="timestamp"><column name="DATE" default="null" /></property>

不同类型日期时间在Java中的表示

java.sql.Time和java.sql.Date如上表所示,格式为:

HH:mm:ss
yyyy-MM-dd

但是java.util.Date和java.sql.Timestamp就有些细节要注意了:

//数据库 datetime类型和timestamp类型
2018-10-05 16:13:46
2018-10-10 09:58:23//Java显示 java.util.Date和java.sql.Timestamp
date=2018-10-05 16:13:46.0
timestamp=2018-10-10 09:58:23.0

后面会多一个小数位秒,称之为纳秒,具体可以查看java.util.Date和java.sql.Timestamp源码。

尤其是如果数据库为date类型,Java对应接收类型为java.util.Date,就更有意思了:

//数据库  date类型
2018-10-05
// Java  java.util.Date类型
date=2018-10-05 00:00:00.0

会自动给你补上00:00:00

参考博文:

MySQL中日期和时间格式化;
MyBatis中Java类型和JDBC类型映射。


【3】Java 大对象类型的 Hiberante 映射

① 几个概念

在 Java 中, java.lang.String 可用于表示长字符串(长度超过 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据。

此外, 在 JDBC API 中还提供了 java.sql.Clob 和 java.sql.Blob 类型, 它们分别和标准 SQL 中的 CLOB 和 BLOB 类型对应。 CLOB 表示字符串大对象(Character Large Object), BLOB表示二进制对象(Binary Large Object)。

映射类型Java类型标准SQL类型MySQL类型Oracle类型
binarybyte[]VARCHAR/BLOBBLOBBLOB
textjava.lang.StringCLOBTEXTCLOB
clobjava.sql.ClobCLOBTEXTCLOB
blobjava.sql.BlobBLOBBLOBBLOB

MySQL不支持标准 SQL 的 CLOB 类型, 在 MySQL 中, 用 TEXT, MEDIUMTEXT 及 LONGTEXT 类型来表示长度超过 255 的长文本数据。

在持久化类中, 二进制大对象可以声明为 byte[] 或 java.sql.Blob 类型; 字符串可以声明为 java.lang.String 或 java.sql.Clob。

实际上在 Java 应用程序中处理长度超过 255 的字符串, 使用 java.lang.String 比 java.sql.Clob 更方便。


② 实例测试

  • 在pojo中添加blob属性字段:
public class News {private Integer id; //fieldprivate String title;private String author;private String describle;private Date date;//使用 title + "," + content 可以来描述当前的 News 记录. //即 title + "," + content 可以作为 News 的 describle 属性值//大文本private String content;private Blob picture;//...
}
  • News.hbm.xml:
<property name="picture" type="java.sql.Blob"><column name="PICTURE" default="null" />
</property>
  • 测试代码如下:
	@Testpublic void testBlob() throws Exception{News news = new News();news.setAuthor("cc");news.setContent("CONTENT");news.setDate(new Date());news.setDescrible("DESC");news.setTitle("CC");InputStream stream = new FileInputStream("1.jpg");Blob image = Hibernate.getLobCreator(session).createBlob(stream, stream.available());news.setPicture(image);session.save(news);System.out.println(news);}
  • 测试结果如下:
Hibernate: insert intoNEWS(TITLE, AUTHOR, DATE, CONTENT, PICTURE) values(?, ?, ?, ?, ?)
News [id=10, title=CC, author=cc, describle=DESC, date=Mon Oct 08 12:17:24 CST 2018, 
content=CONTENT, picture=org.hibernate.engine.jdbc.BlobProxy@28c88600]
//注意,这里picture为Blob代理对象
  • 数据表效果如下:
    在这里插入图片描述

另外,若希望精确映射 SQL 类型, 可以使用 sql-type 属性:

  <!-- 映射大对象 -->
<property name="content"><column name="CONTENT" sql-type="mediumtext"></column></property><property name="picture"><column name="PICTURE" sql-type="mediumblob"></column></property>

http://chatgpt.dhexx.cn/article/6mtQDMnd.shtml

相关文章

MySQL字段类型到JAVA类型的对应及转换

1. 概述 在使用Java JDBC时&#xff0c;你是否有过这样的疑问&#xff1a;MySQL里的数据类型到底该选择哪种Java类型与之对应&#xff1f;本篇将为你揭开这个答案。 2. 类型映射 java.sql.Types定义了常用数据库(MySQL、Oracle、DB2等)所用到的数据类型&#xff0c;官名也叫JDB…

Java类型擦除

什么是类型擦除 Java的泛型是伪泛型&#xff0c;这是因为Java在编译期间&#xff0c;所有的泛型信息都会被擦掉&#xff0c;正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次上实现的&#xff0c;在生成的字节码中是不包含泛型中的类型信息的…

如何直接用Tomcat启动项目

我这里用的是自动安装版本的Tomcat 解压版的方法差不多&#xff0c;就是启动时到bin文件夹下双击startup文件 首先先得有一个war包&#xff08;war后缀文件&#xff09; 这里用eclipse工具做示范 1.确保你的web项目在eclipse里面能启动 2.导出war包 Finish之后就导出了war包。…

Mac启动tomcat的介绍

下载安装到官网上找一下资源就好&#xff0c;windows电脑可以直接双击startup来运行&#xff0c;而本篇博客介绍mac端如何启动tomcat 找到tomcat安装路径 打开访达&#xff0c;下载&#xff0c;找到名为apache-tomcat-版本号的文件 打开终端 进入tomcat文件夹下的bin路径 在…

Mac启动Tomcat

很多使用Mac的小伙伴下载好Tomcat&#xff0c;并不知道如何打开Tomcat&#xff0c;本篇文章将介绍如何开启Tomcat。 1、在访达中找到下载好的Tomcat文件夹 2、打开终端&#xff0c;使用命令进入该文件夹 cd apache-tomcat-10.0.203、进入该文件夹下的bin文件夹 cd bin此时可…

IDEA启动Tomcat失败

IDEA启动Tomcat失败的解决方法 1.运行Tomcat之后&#xff0c;找不到网页 2. Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:1099 3. 部署的tomcat项目呈断开状态 解决方法 在安装的tomcat路径中打开b…

windows系统启动tomcat服务的三种方式

1.双击执行tomcat/bin目录下的startup.bat文件,会自动显示一个命令行窗口(关闭窗口,服务会停止)&#xff0c;不推荐此方法&#xff0c;会严重影响系统访问速度。 2.将tomcat以服务的形式安装,然后在服务管理中,启动tomcat服务。 3.利用Windows的任务计划程序库,创建一个任务,让…

Tomcat启动项目的三种方式

Tomcat启动项目的三种方式 在这里介绍在Tomcat中部署web项目的三种方式&#xff1a; 1.部署解包的webapp目录 2.打包的war文件 3.Manager Web应用程序 一&#xff1a;部署解包的webapp目录 将Web项目部署到Tomcat中的方法之一&#xff0c;是部署没有封装到WAR文件中的Web…

Tomcat 启动流程

目录 一&#xff1a;流程 二&#xff1a;源码解析 1.Lifecycle 2 .各组件的默认实现 3 .源码入口 三&#xff1a;总结 一&#xff1a;流程 步骤 : 1 &#xff09;启动 tomcat &#xff0c; 需要调用 bin/startup.bat ( 在 linux 目录下 , 需要调用 bin/startup.sh…

tomcat两种启动方式

tomcat的两种启动方式&#xff0c;第一种&#xff0c;直接点击bin/startup.bat启动&#xff0c;第二种注册成服务启动 1、通过startup.bat启动 指定jdk&#xff1a;在tomcat/bin/setclasspath.bat 里面添加&#xff08;为什么要在setclasspath.bat里面添加&#xff0c;因为通…

深入springboot怎么启动tomcat

深入springboot怎么启动tomcat EnableAutoConfiguration做了哪些事小总结 Tomcat何时启动的呢&#xff1f;小总结 这是中高级工程师面试中常问的问题。 知道现在有多卷了吧&#xff01; 我记得我刚找工作那会儿&#xff0c;我只要8000的工资&#xff0c;面试官都要问这个问题。…

Windows如何设置Tomcat开机启动?

前置步骤&#xff1a; 在tomcat中的bin目录下&#xff0c;双击startup.bat运行tomcat&#xff0c; 在浏览器正常打开Tomcat情况下&#xff0c;说明tomcat安装正常&#xff0c;双击shutdown.bat停掉tomcat 第一步&#xff1a; 1、设置环境变量 2、在 用户变量 新建 CATALINA_H…

Linux服务器启动tomcat的三种方式

直接进入主题&#xff0c;首先cd进入tomcat的bin文件夹下&#xff0c;然后可以尝试以下三种启动方式&#xff1a; 第一种&#xff08;当前会话启动&#xff09;&#xff1a; ./startup.sh 效果: 然后tomcat就在后台启动了&#xff0c;我们还可以在当前会话中继续输入其它指令…

Tomcat-启动流程

文章目录 叨叨程序入口加载load流程简述Bootstrap.load()Catalina.load(params)init()模板方法init流程总结 start()模板方法流程简述start()模板方法Host.start()特别说明 叨叨 讲真&#xff0c;最开始源码调试几遍下来还是很懵了&#xff0c;尤其是组件初始化过程中不断去调用…

java教程(三)初识J2ee十三个规范

&#xfeff;&#xfeff; 我目前是个java未入门的新手&#xff0c;这边看到高手的一些文章&#xff0c;转载过来。---haogting J2EE是一套全然不同于传统应用开发的技术架构&#xff0c;主要可简化且规范应用系统的开发与部署&#xff0c;进而提高可移植性、安全与复用价值。 …

J2EE【开发环境搭建】

EasyUI【DataGrid数据查询】_云彩123的博客-CSDN博客_easyui 获取datagrid数据如需温习上一节内容&#xff0c;请点击下方链接进行跳转&#xff1a;EasyUI(Tree后端工作)_云彩123的博客-CSDN博客用户信息表&#xff08;T_User&#xff09;列名数据类型长度允许空默认值说明idva…

J2EE(环境搭建)

目录 一、jdk安装&环境配置 A、拿到exe文件 B、默认安装位置 C、配置环境变量 D、注意事项 二、Eclipse安装&设置默认编码集 A、解压 B、选择工作区间 C、设置默认编码集 Ca、设置jsp默认编码 Cb、设置workspace编码方式 三、配置Tomcat及JDK A、配置Tomcat …

java quartz 教程_Quartz 教程

一、关于 Quartz Quartz logo Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。 Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。 Quartz 允许程序开发人员根据时间的间隔来调度作业。 Quartz 实现了作…

J2EE入门:环境搭建

前言&#xff1a; JDK的安装以及JDK的环境配置 tomcat的安装 Eclipce的环境配置 MySQL的安装 JDK安装以及环境配置 直接点击JDK安装包安装 JDK默认安装位置&#xff1a;C:\Program Files\Java 然后双击jdk144文件夹 进来之后选中地址栏复制地址 然后退出至桌面,右键桌面…

J2EE之旅(入门)

从这次开始我们就要开始学习j2ee&#xff0c;我们先来介绍一下我们将要使用到的 1.测试工具&#xff1a;ApiPost_Setup_5.4.2_x64.exe 2.开发工具:vs 3.数据库&#xff1a;考虑了多方面&#xff0c;数据库我们就选用mysql 4.数据库可视化工具&#xff1a; 由于这些软件安装大部…