Mybaits Oracle CLob类型处理

article/2024/12/24 10:22:40

问题描述:

使用的是Oracle 数据库, 表中有一个字段类型为clob类型

问题 :  当使用mybatis查询返回map类型时, 该字段的值为clob对象,而不是数据库里面的字符串

 解决方案:

1.手动进行转换,把clob类型转换为字符串(这种比较简单)

if(map.get("MAIN_BIZ") instanceof Clob){ Clob clob = map.get("MAIN_BIZ") //clob.getSubString(1,(int)clob.length);这样才能获取到对应的字符串 try{ String convertStr = clob.getSubString(1,(int)clob.length); }catch(Exception e){}
}

 2.就是往mybatis的typeHandlerMap中注册clob类型对应的类型处理器

        TypeHandler(类型处理器) : MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。

        2.1创建一个clob处理的TypeHandler

        2.2把上面的clobTypeHandler注册到mybatis中

 @BeanConfigurationCustomizer typeHandlerRegistry() {return configuration -> configuration.getTypeHandlerRegistry().register(ClobTypeHandler.class);}

注意:ConfigurationCustomizer 是mybatis-auto configure.jar包的类

     2.3打断点,就可以看见 typeHandlerMap中有我们注册的ClobTypeHandler了

TypeHandler(类型处理器) 的补充说明:

  1. @MappedJdbcTypes(JdbcType.CLOB)
  2. @MappedTypes(Clob.class)

要注意 MyBatis 不会通过检测数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明字段 类型, 以使其能够绑定到正确的类型处理器上。这是因为 MyBatis 直到语句被执行时才清楚数据类型。

通过类型处理器的泛型,MyBatis 可以得知该类型处理器处理的 Java 类型,不过这种行为可以通过两种方法改变:

  • 在类型处理器的配置元素(typeHandler 元素)上增加一个 javaType 属性(比如:javaType="String");
  • 在类型处理器的类上增加一个 @MappedTypes 注解指定与其关联的 Java 类型列表。 如果在 javaType 属性中也同时指定,则注解上的配置将被忽略。

可以通过两种方式来指定关联的 JDBC 类型:

  • 在类型处理器的配置元素上增加一个 jdbcType 属性(比如:jdbcType="VARCHAR");
  • 在类型处理器的类上增加一个 @MappedJdbcTypes 注解指定与其关联的 JDBC 类型列表。 如果在 jdbcType 属性中也同时指定,则注解上的配置将被忽略。

当在 ResultMap 中决定使用哪种类型处理器时,此时 Java 类型是已知的(从结果类型中获得),但是 JDBC 类型是未知的。 因此 Mybatis 使用 javaType=[Java 类型], jdbcType=null 的组合来选择一个类型处理器。 这意味着使用 @MappedJdbcTypes 注解可以限制类型处理器的作用范围,并且可以确保,除非显式地设置,否则类型处理器在 ResultMap 中将不会生效。 如果希望能在 ResultMap 中隐式地使用类型处理器,那么设置 @MappedJdbcTypes 注解的 includeNullJdbcType=true 即可。 然而从 Mybatis 3.4.0 开始,如果某个 Java 类型只有一个注册的类型处理器,即使没有设置 includeNullJdbcType=true,那么这个类型处理器也会是 ResultMap 使用 Java 类型时的默认处理器。

3.也可以直接注册Mybatis提供的ClobTypeHandler

   mybaits提供了ClobTypeHandler,

  所以我们直接注册:

        但是Mybatist提供的ClobTypeHandler上面没有注解@MappedJdbcTypes(JdbcType.CLOB) 和@MappedTypes(Clob.class) 指定Java type + jdbc type 

        所以 注册的时候就要指定 java type + jdbc type

 @BeanConfigurationCustomizer typeHandlerRegistry() {return configuration -> configuration.getTypeHandlerRegistry().register(Clob.class, JdbcType.CLOB,ClobTypeHandler.class);}

Type Handler Registry源码中提供了 方法,可以直接注册

4.单独指定某个字段进行处理,不会影响全局

 我就遇到一个问题:我注册了clob的处理器,但是之前的代码是别的同事: 取得clob字段之后,进行转换处理,就导致报错 , String 无法转换为 Clob类型,因为注册了clob处理器之后,查询就会返回String,但是之前同事进行转换时就会报错

在mapper.xml文件中,单独指定clob字段的类型处理器,就可以了


<resultMap id="userMap" type="map"><result column="description" property="description" typeHandler="org.apache.ibatis.type.ClobTypeHandler"></result>
</resultMap><select id="selectUserInfo" resultMap="userMap">select * from user_info</select>

至于mybatis的TypeHandlerMap后续我会继续讲解源码的


http://chatgpt.dhexx.cn/article/fyGZgZBw.shtml

相关文章

oracle的clob类型数据,Oracle的CLOB类型数据处理

Oracle菜鸟之grant授权: http://www.2cto.com/database/201408/322396.html oracle 查看用户所在的表空间 : http://www.voidcn.com/article/p-nmijckny-bdz.html oracle grant 详解: http://www.voidcn.com/article/p-rwegsjxt-hs.html Oracle中表列由VARCHAR2类型改成CLOB &a…

鼠标右击选择sublime打开文件(夹)

前言 由于vscode内存占用太高&#xff0c;而我只需要查看文件&#xff0c;更轻量级的编辑器就行&#xff0c;所以使用了sublime&#xff0c;但是vscode可以直接打开文件夹&#xff0c;sublime右击鼠标不会打开文件夹&#xff0c;所以决定修改注册表&#xff0c;模仿vscode打开…

Sublime Text中使用Markdown,看这篇就够了

Markdown插件配置 注意&#xff1a;以下操作在 Sublime Text 中操作 1. 组合键 CtrlShiftP 调出命令面板 2. 输入 Package Control: Install Package&#xff0c;回车 3. 依次下载和配置以下插件。 加载插件 MarkdownEditing CtrlShiftp, 输入 Install Package&#xff0c…

Sublime Text 3 全程详细图文使用教程

一、 前言 使用Sublime Text 也有几个年头了&#xff0c;版本也从2升级到3了&#xff0c;但犹如寒天饮冰水&#xff0c;冷暖尽自知。最初也是不知道从何下手&#xff0c;满世界地查找资料&#xff0c;但能查阅到的资料&#xff0c;苦于它们的零碎、片面&#xff0c;不够系统和全…

sublime text 3下载与安装详细教程

一、下载&#xff1a;打开官网下载链接http://www.sublimetext.com/3&#xff0c;下载Sublime Text 3 portable version”下载下来为“Sublime Text Build 3083 x64.zip”编辑器的包&#xff0c;解压后无需安装就能运行&#xff0c;直接创建桌面快捷键就好 二、双击桌面“Subl…

sublime教程

博客文章地址&#xff1a;点我跳转 目录 下载sublime安装Package Control安装插件ChineseLocalizationLiveReload sublime使用技巧快捷键其他 写在最后 下载sublime 进官网&#xff1a;https://www.sublimetextcn.com/3/下载相应版本 大家应该都是用的Windows&#xff0c;选择…

sublime安装和使用

sublime介绍 sublime是一个代码编辑器&#xff0c;可以编写HTML&#xff0c;PHP&#xff0c;js&#xff0c;css等文件 安装教程 官网搜索下载https://www.sublimetext.com/ 安装过程中需要勾选“Add to explorer context menu”添加右键菜单选项&#xff0c;就是以后你的一些…

Sublime Text 4安装使用(完整教程)

Sublime Text 4安装使用 安装使用语言汉化❤OK啦&#xff0c;觉得有用的点个赞吧&#xff01;&#xff01;&#xff01; 写这篇博客的意义希望能够将我走过的路、踩过的坑记录下来。在后来在遇到的时候能够更好的翻阅。 未经允许&#xff0c;不得擅自使用转载和复制。 安装 在…

sublime使用技巧

工作中有些时候需要快速提取一些有特征的字符串&#xff0c;有些甚至跟正则沾上点边&#xff0c;我经常使用的sublime有时候就派上了很大的用场&#xff0c;记录下 提取某些特征的字符串&#xff0c;使用.*提取这些点“find all”&#xff0c;直接复制如果需要把一个个字符串以…

Sublime text 3手把手使用教程(附带配置完成安装包)

Last-Modified:2022/3/11 来给三年前的这个博客简单加一下win10上sublime编译c的做法 直接去官网下一个免费的 免费的和花钱的功能上没有区别&#xff0c;购买证书的一般是用作商业用途的团队 打开sublime之后&#xff0c;点击Tools/Build System/New Build System 之后会出来…

Sublime 技巧 - 批量替换

sublime快捷键好用程度令人咂舌。 用的多了&#xff0c;你就能体会官网的宣传&#xff1a; Sublime Text: The text editor youll fall in love with 下面介绍个批量替换的技巧。 技巧本身不重要&#xff0c;但体现的操作方式更值得思考。 重点介绍&#xff1a;CtrlD&#xff0…

sublime text3入门教程

作者&#xff1a;sam976 转载需征得作者本人同意&#xff0c;谢谢。 1.介绍 所谓工欲善其事必先利其器&#xff0c;编码过程合理熟练使用工具是优秀程序员必备技能&#xff0c;在诸多工具中&#xff0c;Sublime Text无疑是一款利器&#xff0c;它界面优美、功能强悍、性能令…

Sublime Text4安装教程

一、下载Sublime Text4 打开Sublime Text官网Download - Sublime Text 选择对应操作系统版本下载&#xff0c;这里我是windows 二、安装 选择安装位置 默认在C盘&#xff0c;这里我安装到了D盘&#xff08;点Browse选择安装位置&#xff09; 打勾的表示添加到右键菜单&#…

sublime text3的破解和使用

个人博客&#xff1a;ZJBLOG 之所以想用这个是因为最近在学Python不知道用啥ide好&#xff0c;看同事说这个不错就了解了下&#xff0c;已经有的notepad感觉不太好编程吧&#xff0c;做记事本就行了&#xff0c;atom又感觉太卡了&#xff0c;打开慢的要死&#xff0c;加了一些…

sublime安装和使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 sublime安装和使用教程点击安装程序 选择是点击这里可以更改安装位置&#xff0c;选择合适的安装位置然后点击next&#xff0c;install&#xff0c;finish完成安装点…

Sublime 使用技巧总结

源地址&#xff1a;http://www.cnblogs.com/yingzi/archive/2012/04/24/2469056.html 对于用惯了editplus的人来说&#xff0c;突然接触到sublime有点无所适从&#xff0c;不过稍微适应一段时间后&#xff0c;发现会渐渐的爱上这个小黑盒子。 那么sublime究竟好在啥地方呢&…

sublime text 3 + python配置,完整搭建及常用插件安装

公众号&#xff1a;战渣渣 四年的时间&#xff0c;一直使用EmEditor编辑器进行Python开发&#xff0c;之前是做面向过程&#xff0c;只需要将一个单独的py文件维护好即可&#xff0c;用着也挺顺手&#xff0c;但是最近在做面向对象的开发&#xff0c;不同的py文件中相互关联较多…

Sublime使用详细总结

Sublime使用详细总结 【导读】 Sublime Text具有漂亮的用户界面和强大的功能&#xff0c;例如代码缩略图&#xff0c;多重选择&#xff0c;快捷命令等。SublimeText更妙的是它的可扩展性。SublimeText&#xff1a;一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件&…

Sublime Text教程

文章目录 1 安装2 正确的sublime使用方式3 套件安装3.1 安装Package Control&#xff08;套件管理&#xff09;3.2 安装套件3.3 移除套件3.4 常用套件3.5 Package Setting 1 安装 Sublime Text是一款 轻量级 \color{red}{轻量级} 轻量级的网页编辑器&#xff0c;它能够透过安装…

sublime安装与使用

第一步、下载 浏览器中输入sublime官网地址&#xff0c;打开官网&#xff0c;点击下载&#xff0c;打开下载页&#xff0c;选择所需要的版本进行下载即可。 在此处下载的sublime默认已经集成了很多的插件&#xff0c;比如emmet等。 官网地址&#xff1a;www.sublimetextcn.com…