自定义handler处理器

import java.sql.CallableStatement;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import org.apache.ibatis.type.BaseTypeHandler;

import org.apache.ibatis.type.JdbcType;

import org.apache.ibatis.type.MappedJdbcTypes;

import org.apache.ibatis.type.MappedTypes;

import com.alibaba.fastjson.JSONObject;

/**

* mysql中json类型转换扩展

*

* @author: xiaowei.go

* @date: 2019年11月20日

*

*/

@MappedTypes(JSONObject.class)

@MappedJdbcTypes(JdbcType.VARCHAR)

public class MySqlJsonHandler extends BaseTypeHandler {

/**

* 设置非空参数

*

* @author: xiaowei.go

* @date: 2019年11月20日

* @see org.apache.ibatis.type.BaseTypeHandler#setNonNullParameter(java.sql.PreparedStatement,

* int, java.lang.Object, org.apache.ibatis.type.JdbcType)

*/

@Override

public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter,

JdbcType jdbcType) throws SQLException {

ps.setString(i, String.valueOf(parameter.toJSONString()));

}

/**

* 根据列名,获取可以为空的结果

*

* @author: xiaowei.go

* @date: 2019年11月20日

* @see org.apache.ibatis.type.BaseTypeHandler#getNullableResult(java.sql.ResultSet,

* java.lang.String)

*/

@Override

public JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {

String sqlJson = rs.getString(columnName);

if (null != sqlJson) {

return JSONObject.parseObject(sqlJson);

}

return null;

}

/**

* 根据列索引,获取可以为空的结果

*

* @author: xiaowei.go

* @date: 2019年11月20日

* @see org.apache.ibatis.type.BaseTypeHandler#getNullableResult(java.sql.ResultSet, int)

*/

@Override

public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {

String sqlJson = rs.getString(columnIndex);

if (null != sqlJson) {

return JSONObject.parseObject(sqlJson);

}

return null;

}

/**

* 根据列索引,获取可以为空的结果

*

* @author: xiaowei.go

* @date: 2019年11月20日

* @see org.apache.ibatis.type.BaseTypeHandler#getNullableResult(java.sql.CallableStatement, int)

*/

@Override

public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {

String sqlJson = cs.getString(columnIndex);

if (null != sqlJson) {

return JSONObject.parseObject(sqlJson);

}

return null;

}

}

实体类

代码段

import com.alibaba.fastjson.JSONObject;

@Data

@EqualsAndHashCode(callSuper = false)

@Accessors(chain = true)

public class BizExportJob implements Serializable {

private JSONObject dataRule;

}

map.xml配置

insert into table (data_rule) values (#{dataRule,jdbcType=OTHER,typeHandler=com.magicpose.handler.MySqlJsonHandler})

注册Handler

2种方式

在application.yml声明handler包

mybatis:

config-location: classpath:mybatis-config.xml

mapperLocations: classpath:mappers/*.xml

#配置mybaits自定义类型转换类所在的包

type-handlers-package: com.magicpose.handler

在mybatis-config.xml中注册该Handler

附:优化版

既然自定义handler处理字段值,当然可以直接转化为java bean.

// 注册器如下定义,其他方法参考返回为JSONObject类型的,转化为Class

public class MySqlJsonHandler extends BaseTypeHandler{

private Class clazz;

}

使用mybatis-config.xml中注册该Handler,增加 javaType属性,指定该处理器转换的java bean

记得实体类的属性类型修改为对应的java bean

spring mysql json_SpringBoot+MYSQL 配置支持json数据格式相关推荐

  1. JSON数据格式详解

    文章目录 JSON数据格式概念 JSON的简单数据 JSON对象 对象的属性也可以是JSON对象 JSON格式表示简单数组 对象数组 使用二维数组保存 二维数组 访问淘宝的接口也可以取得JSON格式的 ...

  2. JSON数据格式超全总结

    ** JSON数据格式超全总结** 1.JSON数据格式概念 JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,那么JSON是什么呢? JSON其实是一种轻量级的数 ...

  3. spring boot多数据源配置(mysql,redis,mongodb)实战

    使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...

  4. 【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置

    不久的学习笔记.分享.我想有很大的帮助谁刚开始学习其他人的 备注:该票据于mysql-5.1.73版本号例如 1. mysql源代码编译/安装步骤 1) 官网下载mysql源代码并解压 2) cd至源 ...

  5. Spring Boot使用spring-data-jpa配置Mysql多数据源

    转载请注明出处 :Spring Boot使用spring-data-jpa配置Mysql多数据源 我们在之前的文章中已经学习了Spring Boot中使用mysql数据库 在单数据源的情况下,Spri ...

  6. MySQL/MariaDB中如何支持全部的Unicodesql数据库及配置环境变量的图文教程

    文章来源: 学习通http://www.jaxp.net/ 目录 安装mysql 配置环境变量 安装mysql 下载mysql.我下载的是:mysql-8.0.11-macos10.13-x86_64 ...

  7. centos编译安装配置支持ssl加密的mysql replication

    参考文章:http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-cento ...

  8. mysql ssl编译_centos编译安装配置支持ssl加密的mysql replication

    参考文章:http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-cento ...

  9. MySql 5.7 json数据格式 增删改查 操作 (不定时更新)

    2019独角兽企业重金招聘Python工程师标准>>> 测试的表的结构如下: CREATE TABLE `userinfo` (`id` int(11) NOT NULL,`user ...

最新文章

  1. 也议MySQL中隐式转换
  2. Android Loader机制
  3. 为什么 Java 线程没有 Running 状态?
  4. M码小黄衫买家秀=w=
  5. (3)websocket实现单聊和群聊
  6. 【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)
  7. SAP自学指南:案例公司的需求分析
  8. 三、JVM — 类加载过程
  9. mysql数据库管理手册_CentOS MySQL 用户及数据库管理手册
  10. cygwin中如何使用gcc
  11. 婚纱租赁APP开发功能模块解析
  12. 推荐3个干净、资源多的看剧网站给大家
  13. tp3.2简单的图片上传实现
  14. Python-docx生成word文档
  15. GSM和GPRS网络原理的基本思路
  16. proceed with launch?解决办法
  17. C语言:实现勾股定理的运算
  18. 辨别肖特基二极管好坏的窍门,看完一目了然
  19. 太阳 仰角和方位角(Elevation and Azimuth)
  20. 在家进行硬件升级:入侵Nintendo Joy-Con控制器

热门文章

  1. mysql打开sql语句日志
  2. 请求的链式处理——职责链模式
  3. Redis布隆过滤器
  4. JavaSE各阶段练习题----文件和IO
  5. javaSE各阶段练习题--面向对象-多态-抽象类-接口
  6. 【Redis】新浪微博与微信Redis架构实战 - 笔记
  7. 在nodejs中创建cluster
  8. CentOS下Hive2.0.0单机模式安装详解
  9. linux开机自动启动数据库,mysql随linux开机自动启动
  10. ES集群添加IK分词器