作用:用于JavaType和JdbcType之间的转换

解析:当Mybatis将一个Java对象写入数据库时,它会创建一个PreparedStatument对象,并且使用setValue()方法对占位符设置相应的参数值。Mybatis能够使用内建的类型处理器(所有的基本数据类型、基本类型的包装类型等)将值设置到PreparedStatument。当我们没有指定TypeHandler时,Mybatis会根据参数或者返回结果类型的不同,默认选择合适的类型处理器。

问题:虽然Mybatis可以满足一般的场景,但是有时候我们需要处理一些自定义类型,怎么办呢?

解决:

  • 首先,定义我们的自定义类型

    @Data
    public class ExecutorConf {}
  • 其次,继承BaseTypeHandler实现我们的自定义类型处理器

    // 注解配置 Jdbc 类型
    @MappedJdbcTypes(JdbcType.LONGVARCHAR)
    // 注解配置 Java 类型
    @MappedTypes(ExecutorConf.class)
    public class ExecutorConfHandler extends BaseTypeHandler<ExecutorConf> {// 将JavaType转为JdbcType,设置数据存储到数据库中的格式@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, ExecutorConf executorConf,JdbcType jdbcType) throws SQLException {preparedStatement.setString(i, executorConf.toString());}// 从结果根据列名称获取到的数据的JdbcType转为JavaType@Overridepublic ExecutorConf getNullableResult(ResultSet resultSet, String s) throws SQLException {return JSONObject.parseObject(resultSet.getString(s), ExecutorConf.class);}// 从结果根据列索引获取到的数据的JdbcType转为JavaType@Overridepublic ExecutorConf getNullableResult(ResultSet resultSet, int i) throws SQLException {return JSONObject.parseObject(resultSet.getString(i), ExecutorConf.class);}// 返回值@Overridepublic ExecutorConf getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return JSONObject.parseObject(callableStatement.getString(i), ExecutorConf.class);}
    }
  • 最后,加上注解,指定类型处理器

    @TableField(typeHandler = ExecutorConfHandler.class)
    private ExecutorConf executorConf;

类型处理器TypeHandler相关推荐

  1. MyBatis自定义类型处理器 TypeHandler

    在项目开发中经常会遇到一个问题: 当我们在javabean中自定义了枚举类型或者其它某个类型,但是在数据库中存储时往往需要转换成数据库对应的类型,并且在从数据库中取出来时也需要将数据库类型转换为jav ...

  2. MyBatis(九):MyBatis类型处理器(TypeHandler)详解

    TypeHandler简介 TypeHandler,顾名思义类型转换器,就是将数据库中的类型与Java中的类型进行相互转换的处理器. MyBatis 在设置预处理语句(PreparedStatemen ...

  3. Mybatis——类型处理器TypeHandler

    在日常开发中使用mybatis时,mybatis的mapper.xml.mapper接口.entity实体一般会由mybatis-generator自动生成,其中实体的每个属性与数据库表的列一一对应, ...

  4. MyBatis-Plus——字段类型处理器TypeHandler

    字段类型处理器(TypeHandler) 1,准备工作 (1)MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,假设我们用户表中有一个联 ...

  5. 【Mybatis】类型处理器TypeHandler的作用与自定义

    一.什么是类型处理器 1.类型处理器(TypeHandler) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合 ...

  6. Ibatis的类型处理器TypeHandler解析

    Ibatis允许用户像在hibernate中一样定义自己的类型,但是,用户自定义类型需要与数据库中的字段类型进行对应.它的处理方法是允许我们扩展TypeHandler.Ibatis框架在处理该数据类型 ...

  7. MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)

    MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...

  8. mybatis TypeHandler 类型处理器

    目录 1. 自定义日期类型处理器 2. 配置自定义日期处理器 3. 新增,查询 1. 自定义日期类型处理器 继承mybatis提供的BaseTypeHandler覆写方法, 来转换Java和数据库中的 ...

  9. MyBatis自定义类型处理器(typeHandler)

    MyBatis自定义类型处理器(typeHandler) 我们执行sql语句通过PreparedStatement语句实现,PreparedStatement会设置?值,类型处理器帮PreparedS ...

最新文章

  1. opencv计算brox光流_字节跳动计算机视觉算法实习生视频面试
  2. Java编程入门100例之二十二(字符串查找)
  3. IoC--structuremap
  4. IOS基础之绘图函数的使用
  5. 通过 GitHub Actions 自动创建 Github Release
  6. 什么是mixin,为什么它们有用?
  7. 问题六十三:怎么用ray tracing画sphere sweeping图形
  8. Tuple Class
  9. 小程序学习笔记(3)-模板的操作
  10. UE4 打包ios包失败问题
  11. html5 地图插件,推荐:7款个性化jQuery/HTML5地图插件
  12. mysql与gbase获取行号_mysql/gbase数据库全库库表记录数统计
  13. 网页调用QQ客服的API
  14. 记录一下mac mini 2018 的折腾过程
  15. C语言中转义字符的介绍与使用
  16. netstat -ano 查看端口是否被占用
  17. 外文文献翻译(OCR+Deepl+Mathpix)|CSDN创作打卡
  18. 校园表白墙源码LoveWall
  19. 使用费曼技术更快地学习任何东西 【翻译】
  20. 微信视频号的10大引流技巧

热门文章

  1. 【机器学习】【无监督学习】【算法01-理论1】Apiori算法-筛选频繁集
  2. Linux运维工程师必知的服务器备份工具:Rsnapshot
  3. Pushmall共享电商营销推广平台2023年6月升级进度
  4. 360大数据中心平台化的演进与实践
  5. Seajs使用实例入门
  6. c++的ThreadPool,OpenHarmony源码实现版赏析和使用
  7. AWStats日志分析系统
  8. 我PCT国际专利申请量跃居世界第三
  9. CSDN博客排名前9的大牛们
  10. 693. 交替位二进制数 / 227. 基本计算器 II / 264. 丑数 II