码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 孙卫琴的《精通JPA与Hibernate》的读书笔记:通过JPA处理Blob和Clob类型的数据


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

    java.sql.Blob和java.sql.Clob是JDBC API中的接口。在默认情况下,Blob和Clob接口的实现会使用SQL定位器,这意味着当程序从数据库加载Blob类型或Clob类型的数据时,实际上加载的仅是Blob类型或Clob类型的数据的逻辑指针。接下来程序需要通过Blob.getBinaryStream()或Clob.getCharacterStream()方法得到Blob或Clob类型的数据的输入流,才可以真正读取到大对象数据。

    对于以下程序代码:

    Customer customer=entityManager.find(Customer.class, 
                                         Long.valueOf(1); //第1行
    Blob image=customer.getImage();  //第2行
    InputStream in=image.getBinaryStream();  //第3行
    
    • 1
    • 2
    • 3
    • 4

    第2行的image变量引用的只是数据库中Blob类型的数据的逻辑指针。第3行通过image.getBinaryStream()方法得到Blob类型的数据的输入流,才可以真正读取到数据库中的大对象数据。

    org.hibernate.LobHelper接口提供了一系列用于创建Blob和Clob对象的方法:

    • public Blob createBlob(byte[] bytes)
    • public Blob createBlob(InputStream stream, long length)
    • public Clob createClob(String string)
    • public Clob createClob(Reader reader, long length)

    Hibernate的Session接口的getLobHelper()方法返回一个LobHelper对象。

    假定Customer类的image属性为java.sql.Blob类型,在MySQL数据库中CUSTOMERS表的IMAGE字段为BLOB类型。在Customer类中,映射image属性的代码如下:

    @Column(name="IMAGE")
    @Type(type="blob")
    private Blob image;
    
    • 1
    • 2
    • 3

    此外,JPA API还提供了一个@Lob注解,用来映射Blob或Clob类型的属性。因此,也可以用@Lob注解来映射image属性:

    @Column(name="IMAGE
    • 相关阅读:
      运维面试宝典
      java毕业生设计高校共享机房管理系统的设计与实现计算机源码+系统+mysql+调试部署+lw
      vue瀑布流插件vue-waterfall-plugin
      微信小程序(非个人)备案指南
      Flutter高仿微信-第59篇-同步数据
      upload-labs(1-17关攻略详解)
      分类和static
      超级超级灵性的解题思路,看了全部的题解,没有人想到这个思路,真·力扣唯一——用单调栈处理LeetCode 1562 查找大小为M的最新分组
      动态内存&柔性数组
      使用 Databend 助力 MySQL 的数据分析
    • 原文地址:https://blog.csdn.net/csdnuserlala/article/details/116401787
    • 最新文章
    • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
      用 Hashids 优雅解决 C 端自增 ID 暴露问题
      V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
      LLVM Pass快速入门(四):代码插桩
      milkup:桌面端 markdown AI续写和即时渲染
      基于项目工程构建SBOM(软件物料清单)的研究
      鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
      .NET 中如何快速实现 List 集合去重?
      扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
      浅谈数据访问层
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    小工具 小游戏
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

    京公网安备 11010502049817号