ibatis如何支持clob 和blob

R语言期末复习清单:数据结构、dplyr清洗与统计建模实战 R语言是以向量、因子、数据框为核心的统计编程语言,其索引、类型转换和缺失值处理决定了数据分析流程是否可靠。理解数据结构后,dplyr、tidyr与apply族可按筛选、派生、分组、汇总完成数据清洗;假设检验、方差分析、回归和SARIMA则把统计原理转化为建模能力,ggplot2与base plot负责表达结果。掌握这套链路,能提升课程作业、医学数据分析、生态α多样性与时间序列预测中的可复现性。围绕R语言期末复习,把向量索引、dplyr清洗、apply批处理、统计建模和绘图高频考点压成可执行清单,便于边运行边 阅读详情
    这几天仔细看了一下ibatis的文档,发现2.2后,ibatis的改变还是挺大的。对于自定义类型支持的也不错,这样对于blob和clob数据的处理也就简单多了。
    不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看ibatis是如何支持clob和blob的。

    ibatis提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler
    在spring 中,提供了AbstractLobTypeHandler作为基础类,并且提供了相应的模版方法,所有的工作由LobHandler处理。
    BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的blob
    ClobStringTypeHandler 用于处理clob类型数据,使用字符串来映射Clob
    有一点需要注意的是,AbstractLobTypeHandler中实现了事务支持,需要用来释放相应的资源,所以一定需要在事务环境中进行。

下面是一个简单的例子:

java 代码
 
  1. public class Food {  
  2.     private String content;  
  3.   
  4.     private String id;  
  5.   
  6.     private byte[] image;  
  7.   
  8.     private String name;      
  9.         ...  
  10. }  


xml如下:说明一下,在resultMap中可以通过typeHandler来指定具体的handler.在inline变量中,可以通过handler来定义相应的typeHandler
xml 代码
 
  1. <sqlMap namespace="Food">  
  2.       
  3.     <typeAlias alias="Food" type="org.esoft.hdb.bo.Food"/>  
  4.     <resultMap id="foodResult" class="Food">  
  5.         <result property="id" column="C_ID"/>  
  6.         <result property="name" column="C_NAME"/>  
  7.         <result property="content" column="C_content"  
  8.             typeHandler="org.springframework.orm.ibatis.support.ClobStringTypeHandler"/>  
  9.         <result property="image" column="C_image"  
  10.             typeHandler="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler"/>  
  11.     </resultMap>  
  12.     <sql id="foodFragment">select C_ID,C_NAME,C_CONTENT,C_IMAGE from T_FOOD</sql>  
  13.         <select id="getAll" resultMap="foodResult">  
  14.         <include refid="foodFragment"/>  
  15.     </select>  
  16.     <select id="selectById" parameterClass="string" resultMap="foodResult">  
  17.         <include refid="foodFragment"/> where C_ID=#id#</select>  
  18.       
  19.     <insert id="insert" parameterClass="Food"> insert into T_FOOD ( C_ID,  
  20.         C_NAME,C_CONTENT, C_IMAGE) values ( #id#,  
  21.         #name#,#content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#,  
  22.         #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#)  
  23.         </insert>  
  24.       
  25.     <update id="update" parameterClass="Food"> update T_FOOD set C_NAME = #name#,  
  26.         C_CONTENT =  
  27.         #content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#,  
  28.         C_IMAGE =  
  29.         #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#  
  30.         where C_ID = #id# </update>  
  31.       
  32.     <delete id="deleteById" parameterClass="string"> delete from T_FOOD where C_ID = #id#  
  33.         </delete>  
  34.       
  35. </sqlMap>  


java 代码
 
  1. public interface FoodService {  
  2.   
  3.       
  4.     void save(Food food);  
  5.     Food get(String id);  
  6.     /** 
  7.      * @param food 
  8.      */  
  9.     void update(Food food);  
  10. }  
  11.   
  12. public class FoodServiceImpl implements FoodService {  
  13.      private FoodDAO foodDAO;  
  14.   
  15.     private DaoCreator creator;  
  16.   
  17.     public void setCreator(DaoCreator creator) {  
  18.         this.creator = creator;  
  19.     }  
  20.   
  21.     protected FoodDAO getFoodDAO() {  
  22.         if (foodDAO == null) {  
  23.             foodDAO = (FoodDAO) creator.createDao(FoodDAO.class, Food.class);  
  24.         }  
  25.         return foodDAO;  
  26.     }  
  27.   
  28.     public Food get(String id) {  
  29.         return getFoodDAO().get(id);  
  30.     }  
  31.     public void save(Food food) {  
  32.         getFoodDAO().save(food);  
  33.     }  
  34.     public void update(Food food) {  
  35.         getFoodDAO().update(food);  
  36.     }  
  37.   
  38. }  


spring xml 配置:
xml 代码
 
  1. 。。。  
  2.           <bean id="lobHandler"  
  3.         class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>  
  4.       
  5.     <bean id="transactionManager"  
  6.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  7.         <property name="dataSource" ref="dataSource"/>  
  8.     </bean>  
  9.       
  10.     <bean id="sqlMapClient"  
  11.         class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  12.         <property name="dataSource" ref="dataSource"/>  
  13.         <property name="configLocation">  
  14.             <value>SqlMapConfig.xml</value>  
  15.         </property>  
  16.         <property name="lobHandler" ref="lobHandler"/>  
  17.     </bean>  
  18.       
  19.     <bean id="daoCreate" class="org.esoft.hdb.ibatis.IbatisDaoCreator">  
  20.         <property name="sqlMapClient" ref="sqlMapClient"/>  
  21.     </bean>  
  22.       
  23.     <bean id="foodService" class="org.esoft.hdb.service.FoodServiceImpl">  
  24.         <property name="creator" ref="daoCreate"/>  
  25.     </bean>  
  26.       
  27.       
  28.     <aop:config>  
  29.         <aop:pointcut id="foodServiceMethods"  
  30.             expression="execution(* org.esoft.hdb.service.FoodService.*(..))"/>  
  31.         <aop:advisor advice-ref="txAdvice" pointcut-ref="foodServiceMethods"/>  
  32.     </aop:config>  
  33.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  34.         <tx:attributes>  
  35.             <tx:method name="*" propagation="REQUIRED"/>  
  36.         </tx:attributes>  
  37.     </tx:advice>  


简单的测试:
java 代码
 
  1. save :  
  2.         Food food = new Food();  
  3.         food.setPk("1");  
  4.         food.setName("food1");  
  5.         BufferedInputStream in = new BufferedInputStream(getClass()  
  6.                 .getResourceAsStream("/1.gif"));  
  7.         byte[] b = FileCopyUtils.copyToByteArray(in);  
  8.         food.setImage(b);  
  9.                 in = new BufferedInputStream(getClass().getResourceAsStream(  
  10.                 "/hibernate.cfg.xml"));  
  11.         b = FileCopyUtils.copyToByteArray(in);  
  12.         food.setContent(new String(b));  
  13.         foodService.save(food);  
  14. update:  
  15.               Food food = foodService.get("1");  
  16.         BufferedInputStream in = new BufferedInputStream(getClass()  
  17.                 .getResourceAsStream("/jdbc.properties"));  
  18.         byte[] b = FileCopyUtils.copyToByteArray(in);  
  19.         food.setContent(new String(b));  
  20.         foodService.update(food);  
  21.         food = foodService.get("1");  
  22.         assertNotNull(food.getImage());  
分享到:   
参考知识库
Hbase知识库 4814  关注 | 63  收录
MongoDB知识库 4102  关注 | 271  收录
区块链知识库 2621  关注 | 90  收录
Objective-C知识库 3852  关注 | 1213  收录
评论
6 楼  zyl 2007-01-18  
看来你的文档看的很仔细,精神可嘉
5 楼  宏基小键盘 2007-01-17  
Oracle 
BLOBs/CLOBs 
As of release 2.0.9, iBATIS includes default BLOB/CLOB handlers. If you are using an older version of Oracle (pre-10g), then you might have to write your own Custom Tag Handler to access the proprietary Oracle API to work with LOBs. 

原来如此。 
4 楼  zyl 2007-01-15  
应该可行,这是在全局配置文件中,进行声明typehandler ,不过好像需要callback. 
实在太长,就用typealise定义简单的类型,应该可以吧。
3 楼  宏基小键盘 2007-01-15  
<p><font>在resultmap或inline resultmap中引用长长的typeHandler="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler"是一件很烦的事,翻了下最新文档(2006.11.30),没有发现,今天下了个sql-map-config-2.dtd,在里面有新的发现,楼主帮忙测试下,如果这种方式可行,配置应该会少很多。</font></p>
<p>晕死,代码中加XML出来老是很乱。</p>
<p>楼主自己下载这个文件:<font><a href='http://ibatis.apache.org/dtd/sql-map-config-2.dtd'>http://ibatis.apache.org/dtd/sql-map-config-2.dtd</a></font></p>
<p>然后看看里面有TypeHandler的配置节。</p>
2 楼  zyl 2007-01-15  
恩,跟jdbc driver有很大关系。oracle 10.0.2好像已经作了很大的改变,以前9i老是会报错。
1 楼  宏基小键盘 2007-01-15  
不错的帖子,学到了。不过我们在系统中取Clob时,直接将其映射成string(oracle 10.0.2),也没有什么问题。但是update和insert时没有测试过。会不会和jdbc driver也有关系呢?
FineReport SQL查询分页 打开模板>模板web属性>分页预览设置,选择为该模板单独设置,将默认的工具栏按钮全部清除掉,然后依次添加两个自定义按钮,一个邮件按钮,两个自定义按钮,一个Word格式,一个PDF按钮。如下所示:注:使用具体格式按钮,如邮件、Word格式、PDF按钮是为了JS直接使用控件名称获取空间方便修改其内容; 阅读详情

相关推荐

【ArcGIS Add-in编程】如何创建ArcMap的下拉菜单插件

step1. VS2010中创建一个空的解决方案step2.创建一个项目 直接点击finish。step3 为该项目创建项目,选择Menu,作为根菜单,而后修改xml中的items项,添加需要放在下拉菜单中的项目,例如一个按钮; step4 现在可以创建项目,作为菜单中的项目。为该项目添加新的项目,选择button 此时 xml文件中,多了该button的项目,将该项目添加到items

吃货小跟班的博客 4431

解决问题记录:mybatis的TypeHandler处理blob字段的写入和读取

场景: 开发中遇到这样一种情况,页面传来一个字符串,数据长度非常大,远远大出了varchar2类型的默认长度4000,这里就用到了oracle的blob字段;(其实这里使用clob字段更好,因为clob是大字符字段而blob是大的字节字段两者都用来存储大的数据,但是使用场景不同) 问题: 我们知道页面传递的字符串类型String,但是blob类型只能接受的byte[]类型,那么mybatis如何实现这两者的转换呢? 1 解决思路 最容易想到在接收之后将字符串转成字节数组 如: string.getBy.

kay'blog 2257

数据标注工具:AiLabel.js实现标注 超详细教程 案例分享

背景:在前端开发过程中难免遇到针对图片的缩放平移;以及在图片上进行矢量数据、文本、标注的展示;如果你有上面的任何需求,恭喜你,找到组织了.... 在此背景下,AILabel.js出生了。 前面文章我们已经介绍过AiLabel.js了; https://blog.youkuaiyun.com/u012967771/article/details/113148527 npm下载地址:https://www.npmjs.com/package/ailabel github地址:https://github.com/d.

前端互助会 9365

springboot项目中如何通过注解的形式就能查询出clob类型数据?

orcale数据库类型为clob,废话少说,先上答案,再说明本人实操案例遇到的问题。 答案: 本来java确实有个类型是Clob,但是用上了mybatisplus的this.selectPage()方法查出来却是null,这里为什么类型对上了查出来却是null,本人也没搞清楚,大家有兴趣可以去深究,网上搜了一转也没有相关解释。所以java只能设置字段映射为String类型,但是需要转化,于是有了如上代码。typeHandler是个类型转换器,OracleClobTypeHandle

pangwenyu1989620的博客 1105

热力学仿真软件:SimScale_(1).SimScale入门与基础操作

导航栏:位于页面顶部,包含项目管理、仿真设置、结果分析等主要功能。项目列表:展示用户创建的所有项目。工作区:用于进行具体的操作,如几何建模、网格划分、边界条件设置等。控制台:显示操作日志和仿真进度。网格划分是将几何模型离散化为一系列小单元的过程,这些单元用于求解热力学方程。SimScale提供了多种网格划分方法,包括结构化网格和非结构化网格。SimScale提供了丰富的API接口,用户可以通过编程语言进行二次开发,实现自动化仿真和结果分析。项目管理:创建、删除和管理项目。几何建模:创建、导入和修复几何模型。

kkchenjj的博客 1867

RK3568_Android15适配以太网网卡gmac+国产phy芯片YT8531

本文介绍了在Android15 SDK上适配正点原子ATK-DLRK3568开发板网卡的过程。开发板采用GMAC接口搭配YT8531C PHY芯片,包含两个千兆网口。主要内容包括:硬件原理图确认、网络链路连接方式、内核DTS配置(包括GMAC0和GMAC1的参数设置)、PHY驱动适配(基于motorcomm.c驱动文件)、PHY寄存器读写调试方法以及MAC地址设置方式。文章还分析了常见问题,如网卡注册后无法ping通网络的故障现象。通过详细的硬件确认和软件配置,实现了双网卡在Android系统上的完整适配。

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2014

Mybaits Oracle CLob类型处理

注意:ConfigurationCustomizer 是mybatis-auto configure.jar包的类。问题 : 当使用mybatis查询返回map类型时, 该字段的值为clob对象,而不是数据库里面的字符串。至于mybatis的TypeHandlerMap后续我会继续讲解源码的。使用的是Oracle 数据库, 表中有一个字段类型为clob类型。

sunshinezx8023的博客 4125

[UVM]UVM TLM2.0简介及应用实例分析

本文介绍了TLM2.0在UVM中的实现与应用。TLM2.0作为SystemC模型间的核心传输机制,相比TLM1.0提供了更丰富的特性,包括双向阻塞/非阻塞接口、时间标记和统一数据包。文章详细解析了TLM2.0在UVM中的接口实现方式,包括socket类型定义、数据传输机制以及时间标记处理。通过一个具体实例,展示了如何在UVM组件中使用TLM2.0的initiator和target socket进行数据传输,并说明了标准数据包格式和精确时间标记的优势。最后指出TLM2.0在UVM中的实现主要是为了与Syste

元直的博客 5397

Ibatis读写CLOB数据

Ibatis是一个高效,方便,易于学习的数据访问组件,在性能上比hibernate高,学习难度也比hibernate和jdo要低,而且它比直接使用jdbc方便和易于维护。所以Ibatis深入大家的喜爱,一些对性能有更高的要求的系统(如保险,金融行业系统),或改造遗留系统时,Ibatis是数据访问组件的首选。在使用Oracle数据库时,读取CLOB和BLOB等大类型的数据一直是个比较犯难的事,一般都

人生旅途 2082

Pyinstaller打包为可执行文件编码错误的问题

Pyinstaller打包为可执行文件编码错误的问题 写好的python程序在vscode上运行没有任何问题,将程序利用pyinstaller打包后,运行程序发生了错误。 错误代码 UnicodeDecodeError: ‘utf-8' codec can't decode byte 0xce in position 20-21:invalid cotinuation byte 网上找到的解决方案是: 1.在命令行中输入 chcp 65001 2.按正常方式进行封装 pyinstaller

xuefeng_he的博客 1559

手把手教你学simulink(12.10)--设计和仿真一个用于控制飞机纵向运动(高度和速度)的多变量控制系统

飞机的纵向运动控制是航空工程中的一个重要问题,涉及飞机的高度和速度的精确控制。多变量控制系统可以同时控制多个飞行参数,确保飞机在最佳条件下运行。Simulink提供了一个强大的平台,用于建模、仿真和分析动态系统,非常适合设计和测试多变量控制系统。通过本项目的实施,我们成功设计和仿真了一个用于控制飞机纵向运动(高度和速度)的多变量控制系统。该项目展示了从系统建模、控制器设计、仿真验证到结果分析的完整流程,为多变量控制系统的设计提供了有价值的参考。

MHD0815的博客 598

Ibatis + Spring 操作 Clob 详解

在我们公司,和别的部门做技术支持的过程中,在 Ibatis + Spring 的环境下,操作Oracle数据库CLOB字段的的时候,经常莫名其妙奇妙的出现奇怪的问题,现把出现的问题和解决的办法在下面一步一步列举出来:一:Java工程环境介绍 (1) 工程目录结构  (2) Oracle9i + Oracle10g的驱动 (3) 用到的jar包如下: 

莫等闲的专栏 8688

多周期路径约束(set_multicycle_path )

1.由慢到快的多周期约束 如下图所示,发射时钟周期是接受时钟周期的4倍。默认情况下,按照1T原则来进行静态时序分析和布局布线的。即建立时间是在发射沿后的第一个捕获沿检查,而保持时间是同一时刻下源时钟和捕获时钟的触发边沿下检查的(建立时间检查边沿的前一个触发沿)。 但是这样导致的问题就是该路径过于苛刻,为了满足这条路径的要求,不得不放弃其他路径。或者根本没办法保证这个默认的约束。总之最终造成...

Arist. 5506

收藏:ibatis如何支持clob 和blob

  引用:http://www.iteye.com/topic/46865 以下为原文,是为了方便自己查看!     不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看ibatis是如何支持clob和blob的。     ibatis提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler     在spring 中,提...

Air100的专栏 226

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ibatis+spring存储blob数据

ibatis提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler 在spring 中,提供了AbstractLobTypeHandler作为基础类,并且提供了相应的模版方法,所有的工作由LobHandler处理。    BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的blob    Clob

技术成就梦想 2018

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

如何在IBatis中使用BLOB和CLOB

下面有一个例子在Ibatis中使用Custom Type Handler (CTH)操作BLOB(二进制字节)和CLOB(字符类型)数据类型。Ibatis2.09后提供了对BLOB和CLOB的支持,下面的例子是 oracle上的但也可以用于任何支持Jdbc的数据库。如果用oracle你需要使用最新的ojbc14.jar。 创建表: [code="java"]Report.sql ...

豆芽学Java 173

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ibatis BLOB 图片上传与显示

这几天仔细看了一下iBATIS的文档,发现2.2后,iBATIS的改变还是挺大的。对于自定义类型支持的也不错,这样对于blob和Clob数据的处理也就简单多了。不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看iBATIS是如何支持Clob和blob的。 iBATIS提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler ...

lanapple123的专栏 257

IBATIS存活空间续--SI(SpringIbatis)实现

      上篇博文中庸:没有最佳,只有最适! IBATIS,你合适的存活空间!中分析了IBATIS的生存土壤,本篇博文仅仅是为了粗略介绍上篇博文“结论”做的一个简单设计及其应用,即SI(SpringIbatis)!       SI架构在Spring2.5.6+iBatis2.3.4.8,混合JbdcTemplate&amp;iBatis,支持配置式及编程式单点事务;附带解决BLOB&amp;...

zhangfenglin的专栏 180

ibatis中操作Oracle的blob,clob大数据方法

 在ibatis中处理blob,clob数据的方法比较简单,但有一些需要注意的地方。首先在早期的ibatis版本中,对这方面的支持其实也不算太好了,得实现一个接口。从某个版本(记不清了),ibatis对大数据的支持比较好了。具体做法如下:1、对于blob数据的操作sqlmap的定义中并没有什么特别的,只是在定义POJO时,blob字段应该对应byte[]类型的数据即可。如:

石破惊天 1067

iBATIS操作CLOB字段实战浅析

iBATIS操作CLOB字段的问题:在网上搜索发现有人遇到了相似的问题,但是情况不尽相同。现在把经验写出来,与大家分享。 [b]环境:[/b] JDK/JRE:1.5.0;Spring:1.2.7;iBATIS:2.1.7;Oracle:9.2.0.1;JDBC:OJDBC14_10g.jar [b]目标:[/b] 基于Spring提供的DBCP,使用iBATIS SQL ...

志诚自制-2011,时间管理、效率为王 217

ibatis blob字段处理

发现2.2后,ibatis的改变还是挺大的。对于自定义类型支持的也不错,这样对于blob和clob数据的处理也就简单多了。 不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看ibatis是如何支持clob和blob的。 不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看ibatis是如何支持clob和blob的。 ...

lvdan244的博客 239
上一篇: ETL (数据仓库技术)
下一篇: Spring数据库访问之iBatis(一)
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值