美文网首页
Mybatis存取数据格式转换

Mybatis存取数据格式转换

作者: 周_0717 | 来源:发表于2020-10-27 18:37 被阅读0次

    使用举例:

    @TableField(typeHandler = StringListTypeHandler.class)
    private List<String> topList;
    
    1. 对需要转换类型的字段添加TableField注解指定对应执行当class(这个class一定要是对应此字段class类型的构造函数)

    2. 别忘了在配置文件中配置转换文件所在包的位置

    mybatis-plus.type-handlers-package: com.zpf.demo.global.handler
    
    1. TypeHanlder源码:
    @MappedTypes({Object.class})
    @MappedJdbcTypes(JdbcType.VARCHAR)
    public class JsonTypeHandler<T> extends BaseTypeHandler<T> {
        protected static final ObjectMapper objectMapper = new ObjectMapper();
        protected Class<T> type;
        public JsonTypeHandler(Class<T> type) {
            if (type == null) {
                throw new NullPointerException("Type argument cannot be null");
            }
            this.type = type;
        }
        @Override
        public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
            ps.setString(i, toJsonString(parameter));
        }
        @Override
        public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
            return parse(rs.getString(columnName));
        }
        @Override
        public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            return parse(rs.getString(columnIndex));
        }
        @Override
        public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
            return parse(cs.getString(columnIndex));
        }
        protected String toJsonString(Object parameter) {
            try {
                return objectMapper.writeValueAsString(parameter);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        protected T parse(String json) {
            try {
                return objectMapper.readValue(json, type);
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }
    
    @MappedJdbcTypes(JdbcType.VARCHAR)
    @MappedTypes({List.class})
    public class StringListTypeHandler extends JsonTypeHandler<List<String>> {
        public StringListTypeHandler(Class<List<String>> type) {
            super(type);
        }
        @Override
        protected List<String> parse(String json) {
            try {
                return objectMapper.readValue(json, type);
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }
    

    其中MappedJdbcTypes注解描述对应数据库字段类型,MappedTypes注解描述转换字段类型了;

    2020-10-08

    相关文章

      网友评论

          本文标题:Mybatis存取数据格式转换

          本文链接:https://www.haomeiwen.com/subject/tvehpktx.html