• springboot中使用mybatis的类型转换器


    转换器类

    package com.tiger.handler;
    
    import org.apache.commons.collections.CollectionUtils;
    import org.apache.commons.lang.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;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * Java中 List类型 <-> 数据库中varchar类型  相互转换,【,】号分割
     */
    //@MappedJdbcTypes(JdbcType.VARCHAR)
    //@MappedTypes(List.class)
    public class StringAndListTypeHandler extends BaseTypeHandler<List<String>> {
    
        @Override
        public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameterList, JdbcType jdbcType) throws SQLException {
            // Java类型到JDBC类型
            if (CollectionUtils.isNotEmpty(parameterList)) {
                String param = parameterList.stream().map(String::valueOf).collect(Collectors.joining(","));
                ps.setString(i, param);
            }
        }
    
        @Override
        public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
            // JDBC类型到Java类型
            String paramStr = rs.getString(columnName);
            return splitAndConvert(paramStr);
        }
    
        @Override
        public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            // JDBC类型到Java类型
            String paramStr = rs.getString(columnIndex);
            return splitAndConvert(paramStr);
        }
    
        @Override
        public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
            // JDBC类型到Java类型
            String paramStr = cs.getString(columnIndex);
            return splitAndConvert(paramStr);
        }
    
        private List<String> splitAndConvert(String paramStr) {
            if (StringUtils.isBlank(paramStr)) {
                return new ArrayList<>();
            } else {
                List<String> scopes = Arrays.asList(paramStr.split(","));
                return scopes.stream().map(String::valueOf).collect(Collectors.toList());
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    使用1

    -- 方式1 配置文件中指定转换器包所在位置,在转换器类上添加注解 
    mybatis:
      type-handlers-package: com.tiger.handler
    -- 在转换器类上添加注解 
    @MappedJdbcTypes(JdbcType.VARCHAR)
    @MappedTypes(List.class)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用2

    -- 方式2 去除方式1中的配置,直接在xml文件中直接指定
    -- 插入或更新
    #{teachCourses,jdbcType=VARCHAR,typeHandler=com.tiger.handler.StringAndListTypeHandler}
    -- 查询,在resultMap中指定
    <result column="JSKC" property="teachCoursesList"
    jdbcType="VARCHAR" typeHandler="com.tiger.handler.StringAndListTypeHandler" />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    微信小程序 | 酷炫时钟样式整理【附源码】
    Pytest框架中fixture功能详解
    《面试系列篇》——11种常用的设计模式
    Python中的变量x是一个占位符,用于存储和表示数据
    第七章 操作位和位串(三)
    MySQL 增删改 insert delete update 实例
    打造四维软件研发团队(技术 + 产品 + 业务 + 管理)
    新手小白服务器安装java环境
    ZMQ之共享键值缓存(克隆模式)
    日常工作中常用的抓包工具都有哪些呢?
  • 原文地址:https://blog.csdn.net/qq_36336332/article/details/126179468