类型处理器TypeHandler
作用:用于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相关推荐
- MyBatis自定义类型处理器 TypeHandler
在项目开发中经常会遇到一个问题: 当我们在javabean中自定义了枚举类型或者其它某个类型,但是在数据库中存储时往往需要转换成数据库对应的类型,并且在从数据库中取出来时也需要将数据库类型转换为jav ...
- MyBatis(九):MyBatis类型处理器(TypeHandler)详解
TypeHandler简介 TypeHandler,顾名思义类型转换器,就是将数据库中的类型与Java中的类型进行相互转换的处理器. MyBatis 在设置预处理语句(PreparedStatemen ...
- Mybatis——类型处理器TypeHandler
在日常开发中使用mybatis时,mybatis的mapper.xml.mapper接口.entity实体一般会由mybatis-generator自动生成,其中实体的每个属性与数据库表的列一一对应, ...
- MyBatis-Plus——字段类型处理器TypeHandler
字段类型处理器(TypeHandler) 1,准备工作 (1)MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,假设我们用户表中有一个联 ...
- 【Mybatis】类型处理器TypeHandler的作用与自定义
一.什么是类型处理器 1.类型处理器(TypeHandler) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合 ...
- Ibatis的类型处理器TypeHandler解析
Ibatis允许用户像在hibernate中一样定义自己的类型,但是,用户自定义类型需要与数据库中的字段类型进行对应.它的处理方法是允许我们扩展TypeHandler.Ibatis框架在处理该数据类型 ...
- MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)
MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...
- mybatis TypeHandler 类型处理器
目录 1. 自定义日期类型处理器 2. 配置自定义日期处理器 3. 新增,查询 1. 自定义日期类型处理器 继承mybatis提供的BaseTypeHandler覆写方法, 来转换Java和数据库中的 ...
- MyBatis自定义类型处理器(typeHandler)
MyBatis自定义类型处理器(typeHandler) 我们执行sql语句通过PreparedStatement语句实现,PreparedStatement会设置?值,类型处理器帮PreparedS ...
最新文章
- opencv计算brox光流_字节跳动计算机视觉算法实习生视频面试
- Java编程入门100例之二十二(字符串查找)
- IoC--structuremap
- IOS基础之绘图函数的使用
- 通过 GitHub Actions 自动创建 Github Release
- 什么是mixin,为什么它们有用?
- 问题六十三:怎么用ray tracing画sphere sweeping图形
- Tuple Class
- 小程序学习笔记(3)-模板的操作
- UE4 打包ios包失败问题
- html5 地图插件,推荐:7款个性化jQuery/HTML5地图插件
- mysql与gbase获取行号_mysql/gbase数据库全库库表记录数统计
- 网页调用QQ客服的API
- 记录一下mac mini 2018 的折腾过程
- C语言中转义字符的介绍与使用
- netstat -ano 查看端口是否被占用
- 外文文献翻译(OCR+Deepl+Mathpix)|CSDN创作打卡
- 校园表白墙源码LoveWall
- 使用费曼技术更快地学习任何东西 【翻译】
- 微信视频号的10大引流技巧