1 注解的使用

import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface DefXXMapper {@Select(" SELECT  id, tag, top_xx ,create_time as createTime, update_time as updateTime  FROM `talentX` where`status`  = 1 order by id  DESC  limit #{offset},#{limit} ")@Results(value = {@Result(column = "top_xx", property = "topXx", jdbcType = JdbcType.VARCHAR, javaType = TopNoteXWrapper.class),})List<TalentX> queryBatchTalents(@Param("offset") Integer offset, @Param("limit") Integer pageSize);@Insert(" insert into  `talentX` ( tag ,top_xx , status) VALUES" +" ( #{tag},#{topXx,javaType=com.openpilot.TopNoteXWrapper,jdbcType=VARCHAR} ,#{status}) ")@Options(useGeneratedKeys = true,keyProperty = "id" ,keyColumn = "id")int insertOne( Talent talentX);}

2  自定义泛型类型TypeHandler

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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 java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** <b>Description:用以mysql中json格式的字段,进行转换的自定义转换器,转换为实体类的T类型 属性</b>*/
@MappedTypes(value = {JSONObject.class,TopNoteXWrapper.class})
@MappedJdbcTypes(value = {JdbcType.VARCHAR}, includeNullJdbcType = true)
@Slf4j
public class GenericTypeHandler<T extends Object> extends BaseTypeHandler<T> {private Class<T> clazz;private ObjectMapper objectMapper = new ObjectMapper();public GenericTypeHandler(Class<T> clazz) {if (clazz == null) {throw new IllegalArgumentException("Type argument cannot be null");}this.clazz = clazz;}@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {try {ps.setString(i, objectMapper.writeValueAsString(parameter));}catch (Throwable e){log.error("com.openpilot.GenericTypeHandler.setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType)  异常 JSON兜底",e);ps.setString(i, JSON.toJSONString(parameter));}}/*** 根据列名,获取可以为空的结果*/@Overridepublic T getNullableResult(ResultSet rs, String columnName) throws SQLException {String sqlJson = rs.getString(columnName);if(StringUtils.isNotBlank(sqlJson)){try {return objectMapper.readValue(sqlJson, clazz);}catch (Throwable e){log.error("com.openpilot.GenericTypeHandler.getNullableResult(ResultSet rs, String columnName) 异常 JSON兜底",e);return JSONObject.parseObject(sqlJson, clazz);}}return null;}/*** 根据列索引,获取可以为空的结果*/@Overridepublic T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String sqlJson = rs.getString(columnIndex);if(StringUtils.isNotBlank(sqlJson)){try {return objectMapper.readValue(sqlJson, clazz);}catch (Throwable e){log.error("com.openpilot.GenericTypeHandler.getNullableResult(ResultSet rs, int columnIndex) 异常 JSON兜底",e);return JSONObject.parseObject(sqlJson, clazz);}}return null;}@Overridepublic T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String sqlJson = cs.getString(columnIndex);if(StringUtils.isNotBlank(sqlJson)){try {return objectMapper.readValue(sqlJson, clazz);}catch (Throwable e){log.error("com.openpilot.GenericTypeHandler.getNullableResult(CallableStatement cs, int columnIndex) 异常 JSON兜底",e);return JSONObject.parseObject(sqlJson, clazz);}}return null;}
}

3 mybatis-config.xml 增加配置  或者使用coding方式

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="cacheEnabled" value="false"/><setting name="multipleResultSetsEnabled" value="true"/><setting name="useGeneratedKeys" value="true"/><!--<setting name="autoMappingBehavior" value="PARTIAL"/>--><!--<setting name="autoMappingUnknownColumnBehavior" value="NONE"/>--><!--<setting name="defaultExecutorType" value="SIMPLE"/>--><!--<setting name="defaultStatementTimeout" value="25"/>--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeHandlers><typeHandler handler="com.openpilot.GenericTypeHandler"/></typeHandlers></configuration>
//类型转换映射注册@PostConstruct@Autowiredprivate void specialTypeHandlerRegistry(SqlSessionFactory sqlSessionFactory) {TypeHandlerRegistry typeHandlerRegistry = sqlSessionFactory.getConfiguration().getTypeHandlerRegistry();typeHandlerRegistry.register(Gender.class, JdbcType.VARCHAR, EnumTypeHandler.class);}

【Mybatis】SpringBoot 自定义TypeHandler 完整步骤相关推荐

  1. Mybatis实现自定义TypeHandler

    本文主要记录学习mybatis自定义TypeHandler实例. 本实例是java中的List类型的数据存入数据库转为varchar类型 首先是POJO的内容如下 public class Hobby ...

  2. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler

    此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结. Mybatis实现自定义的转换器,十分的简单,其主要步骤分为三步,这里以操作XMLType类型为例. 第 ...

  3. springboot+mybatis集成自定义缓存ehcache用法笔记

    今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一.ehcache介绍 EhCache 是一个纯Java的进程内缓存管理框架,属 ...

  4. MyBatis 自定义 typeHandler

    自定义typeHandler 对于自定义typeHandler来说,需要在配置文件中注册typeHandlers 然后需要实现TypeHandler接口, 一个例子 首先编写调度的处理类 packag ...

  5. springboot项目mybatis日志自定义设置无法生效

    springboot项目mybatis日志自定义设置无法生效,就是无法设置日志级别,无法对java.sql.PreparedStatement.java.sql.Connection等进行设置. 翻了 ...

  6. 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

    前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...

  7. java整合mybatis,springboot集成mybatis

    # springboot集成mybatis springboot基础mybatis还是很简单的,比之前springmvc集成mybatis要少很多配置,只要大家按照步骤一步一步来,几分钟就 能实现.具 ...

  8. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...

  9. 大数据基础系列 1:Windows 安装 VMware Workstation 虚拟机完整步骤及需要注意的问题

    文章目录 前言 一.下载正版虚拟机不同版本 1.1.通过官网进行下载 VM 虚拟机 1.1.1.选择所需版本下载 1.1.2.VM 15.1.0 Pro for Windows 下载 1.2.免注册账 ...

最新文章

  1. data es集群master_Kubernetes Helm3 部署 ElasticSearch amp; Kibana 7 集群
  2. Packt.Java.9.High.Performance.2017.11
  3. UA STAT687 线性模型II 最小二乘理论2 约束最小二乘估计
  4. 查看.Net程序的框架版本的方法
  5. mysql冷备增量备份,MySQL备份与恢复之真实环境使用冷备(2)
  6. Hibernate HQL基础 投影查询
  7. java swt 菜鸟教程_编程基础学习JS的入门教程
  8. C库宏-offsetof()
  9. LeetCode 252. Meeting Rooms (会议室)$
  10. etcd 启动分析_Etcd 架构与实现解析
  11. salt grains详解
  12. adprw指令通讯案例_S7200和威纶通触摸屏MODBUS RTU协议通讯
  13. js定时刷新页面数据
  14. 行测题数字推理技巧总结(简单精辟)
  15. Install Mysql MMM On Redhat6.3
  16. 泰文utf-8转unicode编码实现
  17. 算术,逻辑左移右移(转)
  18. 基于python-opencv给图像添加水印
  19. VS2017+openCV3.4.6+openCV3.4.6 contrib扩展模块安装
  20. ubuntu18.04安装详解

热门文章

  1. OpenGL(5)Texture - 两张图片
  2. 产量预测文献读后整理
  3. 中国房价走势分析——基础数据收集
  4. mysql eav_mysql – 如何使此eav查询生成水平结果
  5. 微风:什么是UI设计?
  6. 58沈剑-数据库使用规范
  7. Unity随记(一) LookAt和LookRotation的使用
  8. 云服务器BBC销售渠道,云服务器bbc
  9. HttpClient Utils工具类的编写方法分享
  10. Android12(S)授权弹窗被悬浮窗遮挡导致无法点击问题分析