• 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
  • 相关阅读:
    Express框架概述
    Java:SpringBoot整合Spring Batch示例
    MySQL的时间差函数、日期转换计算函数
    java-net-php-python-jsp社会公共常识科普网的设计与实现计算机毕业设计程序
    藏品新塑 | 聚沙数藏携手Metaboard元乐达成战略联盟 聚沙官方全方位战略扶持
    Coreldraw2020最新64位电脑完整版本下载教程
    力扣:第 304 场周赛
    create® 3入门教程-创建Create3 Docker映像
    【lesson8】冯诺依曼体系的介绍
    蚂蚁三面滑铁卢!遭分布式截胡,靠这些笔记潜修 30 天,挺进京东
  • 原文地址:https://blog.csdn.net/qq_36336332/article/details/126179468