此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结。

Mybatis实现自定义的转换器,十分的简单,其主要步骤分为三步,这里以操作XMLType类型为例。

第一步

新建一个转换类,实现TypeHandler接口,接口的泛型指定参数类型,不指定则为Object:

public class XmltypeTypeHandler implements TypeHandler

该接口主要有以下4个方法:

public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) public String getResult(ResultSet rs, String columnName) throws SQLException

public String getResult(ResultSet rs, int columnIndex) throws SQLException

public String getResult(CallableStatement cs, int columnIndex) throws SQLException

方法的作用看名字应该就能明白,setParameter是传入参数时的操作,在参数传入到数据库前需要做加工处理的代码,可以写在该方法内,其它三个均为获取查询结果方法,在得到jdbc的查询结果后可以转换为任意你想要的类型。

第二步

在mapper-config中,注册你实现的转换器类,其中jdbcType可以指定的类型在Mybatis的枚举类org.apache.ibatis.type.JdbcType中有明确的定义,不能为该枚举以外的值,不然会出错。这里因为枚举中没有我们需要的XMLType类型,所以指定为UNDEFINED。(也可以不指定具体的类型,在使用时用typeHandler指定具体的类即可):

第三步

在你的mapper映射文件中使用类型转换器:

insert into T_Content(

) values (

#{controlId,jdbcType=BIGINT},

#{xmlFile,javaType=string,jdbcType=UNDEFINED,typeHandler=com.tyyd.dw.context.XmltypeTypeHandler},

#{drmFile,jdbcType=BLOB}

)

注意传入的xmlFile参数,指定了javaType、jdbcType和typeHandler,表明我们要使用哪个类型处理器,当然你也可以只指定其中的某一项,但是该项存在必须唯一,如果一模一样存在多个又指定不清晰的话,Mybatis会因为不能进行区分而出现错误。

至此,一个mybatis的自定义类型转换器就实现完成了,需要注意的是,上面指定的类型处理器仅在插入数据时起作用,想要在查询时也使用自定义的类型处理器,需要在resultMap内属性的标签中进行指定,其指定的标签javaType、jdbcType和typeHandler名称和使用方式都是一样的,这里就不再赘述。

附上完整的类型转换器代码,因为XMLType类型要查询时,可以使用数据库的xmltype.getclobval()直接返回当成string来操作,所以返回的方法都没有进行特殊处理。(也可以使用xmltype.getstringval()函数返回string,但在实际使用过程中发现当字段为null时,getstringval()会出现ORA-06502:numeric or value error:character string buffer too small的错误,getclobval()则不会出现错误,所以推荐使用getclobval()函数):

/**

* oracle SYS.XMLTYPE 类型自定义处理器

*

* User: liyd

* Date: 13-12-27

* Time: 下午4:53

*/

public class XmltypeTypeHandler implements TypeHandler {

@Override

public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)

throws SQLException {

//防止为null时,创建XMLType出现错误

if (StringUtils.isNotBlank(parameter)) {

DelegatingConnection connection = (DelegatingConnection) ps.getConnection()

.getMetaData().getConnection();

XMLType xmltype = XMLType.createXML(connection.getDelegate(), parameter);

ps.setObject(i, xmltype);

} else {

ps.setString(i, null);

}

}

@Override

public String getResult(ResultSet rs, String columnName) throws SQLException {

//数据库sql查询时xmltype字段使用xmltype.getclobval()返回

return rs.getString(columnName);

}

@Override

public String getResult(ResultSet rs, int columnIndex) throws SQLException {

return rs.getString(columnIndex);

}

@Override

public String getResult(CallableStatement cs, int columnIndex) throws SQLException {

return cs.getString(columnIndex);

}

}

oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler相关推荐

  1. 通过mybatis自定义参数类型转换器,进行数据库字段加密脱敏

    1 问题背景 在数据库存储人员的信息时,有一些信息是敏感数据,如身份证号.出生地等.为了防止信息泄漏,这些信息不允许直接在数据库中查看,此时就需要对这些字段进行加密存储,但在页面查看的仍旧是解密后的数 ...

  2. 自定义的类型转换器中怎样自定义错误消息?(待解答)

    1.HTTP没有"类型"的概念,每一项表单输入只可能是一个字符串或一个字符串数组.从HTML表单到服务器端,必须把String转换为特定的数据类型. 2.字符串和基本数据类型之间的 ...

  3. Spring MVC__自定义日期类型转换器

    WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们.说真的,以前真没这样做过,之前都是一口气查 ...

  4. 使用 mybatis 自定义日期类型转换器

    文章目录 前言 一.resources 1.1 sqlMapConfig.xml 1.2 log4j.properties 1.3 userMapper.xml 二.java结构 2.1 dao 2. ...

  5. 玩转Mybatis中的类型转换器TypeHandler

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 抛开使用场景谈技术都是耍流氓 1. 场景 日常java开发中经常有这种需求,用0或者1这些代 ...

  6. Mybatis特殊值Enum类型转换器-ValuedEnumTypeHandler

    引言 typeHandlers 阅读官方文档 typeHandlers 一节{:target="_blank"} MyBatis 在预处理语句(PreparedStatement) ...

  7. EasyExcel 自定义LocalDate类型转换器Converter

    1 Maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel< ...

  8. mybatis 自定义转换规则_Mybatis使用小技巧-自定义类型转换器

    一般情况下,mybatis自带的类型转换器已经足够用了,但是需求永无止境,自定义类型转换器还是学一下吧,指不定哪天会用上. 举个没啥用的示例 javabean如下: public class User ...

  9. 04.MyBatis别名的设置和类型转换器

    别名的设置:(别名不区分大小写): 设置单个别名: <configuration><properties resource="db.properties" /&g ...

最新文章

  1. 增加了一行代码,让我们提高了 3000% 的性能
  2. checkbox管理
  3. linux chroot 命令 设置根目录路径
  4. python update_python 字典中的Update()函数
  5. 2021-10-20 Speaking Class
  6. PDGAN: A Novel Poisoning Defense Method in Federated Learning Using Generative Adversarial Network笔记
  7. Magical Sticks 棍子拼接
  8. 微信读书vscode插件_vscode 常用的插件
  9. ubuntu mysql 内存满了_Ubuntu mysql可以把data防止到内存盘中
  10. 移植opencv2.4.9到android过程记录
  11. 金融项目app业务及测试策略
  12. 背包九讲——全篇详细理解与代码实现
  13. librdkafka官方Demo在Windows上运行与使用
  14. 悬臂梁振动方程及仿真
  15. 怎样压缩ppt的大小?
  16. base64编码将字符串转换为图片
  17. Teamviewer解决许可证授权的问题
  18. win10删除文件夹提示需要管理员权限的解决办法
  19. MFS分布式存储搭建
  20. python 高德/百度/腾讯/谷歌API 与WGS84坐标互转(BD09/GCJ02/WGS84)

热门文章

  1. C# Speech学习笔记(三)
  2. EC地图编辑器(预览版)
  3. 同步、异步的使用场景及好处
  4. 剪映电脑版_插上手机秒变2K屏笔记本!TNT go扩展本评测:欢迎使用下一代电脑...
  5. 【毕业设计】基于PHP的网上书店的设计(论文)
  6. python os 遍历 子目录中所有文件_Python处理文件系统的10种方法 !
  7. iqoo玩游戏怎么回主界面_科普向:iQOO游戏功能到底怎么用?
  8. java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网
  9. HALCON 21.11:深度学习笔记---设置超参数(5)
  10. mysql数据库集群 主主复制 原理_MySql搭建集群 之 主主复制(双主代从)MYSQL数据库...