zoukankan      html  css  js  c++  java
  • MyBatis Plus数组list存入数据库之TypeHanlder类转换器

     
    入参:字段String[] 直接存入数据库
      TypeHandler概念
        MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换
    1.数据库字段类型更改为json, mysql版本需要5.7.1以上

    自定义转换器
    import com.fasterxml.jackson.databind.ObjectMapper;
    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.Set;
    
    /*
       <columnOverride column="urls" javaType="java.lang.String[]" typeHandler="JsonStringArrayTypeHandler"/>
     */
    @MappedJdbcTypes({JdbcType.VARCHAR})
    public class JsonStringArrayTypeHandler extends BaseTypeHandler<String[]> {
        private static final ObjectMapper mapper = new ObjectMapper();
    
        @Override
        public void setNonNullParameter(PreparedStatement ps, int i, String[] parameter, JdbcType jdbcType) throws SQLException {
            ps.setString(i,toJson(parameter));
        }
    
        @Override
        public String[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
            return this.toObject(rs.getString(columnName));
        }
    
        @Override
        public String[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            return this.toObject(rs.getString(columnIndex));
        }
    
        @Override
        public String[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
            return this.toObject(cs.getString(columnIndex));
        }
    
        private String toJson(String[] params) {
            try {
                return mapper.writeValueAsString(params);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return "[]";
        }
    
        private String[] toObject(String content) {
            if (content != null && !content.isEmpty()) {
                try {
                    return (String[]) mapper.readValue(content, String[].class);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            } else {
                return null;
            }
        }
    }
     
    实体类加上以下2个注释.
      遇到autoResultMap 无法识别, 去官网看了下最新版本Ok了 我只能告诉你<version>3.4.1</version>支持
        @TableName(autoResultMap = true,value="tb_post")
        @TableField(typeHandler = JsonStringArrayTypeHandler.class)
      官方对这个字段的解释,新版本的也不需要去xml配置
     
    @Data
    @TableName(autoResultMap = true,value="tb_post")
    public class Post implements Serializable {
        private static final long serialVersionUID = 321216665472999991L;
        /**
         * 帖子id
         */
        @TableId
        private Long id;
      
        /**
         * 图片路径 一对多
         */
        @TableField(typeHandler = JsonStringArrayTypeHandler.class)
        private String[] imgUrl;
    
       
    }

      

    配置是结束, 直接使用就行

  • 相关阅读:
    Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
    Stm32 控制1.44寸液晶显示图片 基于stm32f051k8u6
    makefile自动编译
    Stm32CubeMX5 创建LED控制工程
    ARM 汇编与C之间 的调用
    shell 脚本文件类型.sh ,变量
    bzoj3589 动态树 求链并 容斥
    bzoj2287【POJ Challenge】消失之物 缺一01背包
    bzoj2916: [Poi1997]Monochromatic Triangles 思路
    [NOI2010]超级钢琴 主席树
  • 原文地址:https://www.cnblogs.com/jiuya/p/14049696.html
Copyright © 2011-2022 走看看