使用Mybatis-plus配置TypeHanlder实现自定义转换

为什么要写这篇文章呢?
    在项目开发时候,我们需要将前端传递过来的数组等…一些不需要怎么操作的类型存入数据库。然后在查询数据详情时候将数据再用数组返回去就行了,这个时候就可以使用TypeHanlder来帮我们实现。

文章环境是在Mybatis-plus下使用:
我的需求是将数据库字段为json格式的数据放到List中返回给前端。
首先:
   1、创建一个Handler类然后继承BaseTypeHandler。代码如下:改为字段类型List,在这个Handler类上加入两个注解:
@MappedJdbcTypes(JdbcType.VARCHAR) // 数据库类型
@MappedTypes({List.class}) // java数据类型

2、在对应的实体类上加上
@TableName(value = “td_result_basic_info”, autoResultMap = true)

3、在对应的实体类的字段上加上
@TableField(value = “数据库字段名称”, typeHandler = StringToListHandler.class)

**4、在配置文件中加入
mybatis-plus:
  type-handlers-package: 你的的handler包名
**

/**
 * @author by xxx
 * @version 1.0.0
 * @description StringToListHandler
 * @date 2023/9/7 11:25
 */
@MappedTypes({List.class})
@MappedJdbcTypes({JdbcType.VARCHAR, JdbcType.BLOB})
public class StringToListHandler extends BaseTypeHandler<List<Integer>> {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, List<Integer> strings, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i, JsonUtils.toJsonString(strings));
    }

    @Override
    public List<Integer> getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return convert(resultSet.getString(s));
    }

    @Override
    public List<Integer> getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return convert(resultSet.getString(i));
    }

    @Override
    public List<Integer> getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return convert(callableStatement.getString(i));
    }

    @Override
    public List<Integer> getResult(ResultSet rs, String columnName) throws SQLException {
        return super.getResult(rs, columnName);
    }

    @Override
    public List<Integer> getResult(ResultSet rs, int columnIndex) throws SQLException {
        return super.getResult(rs, columnIndex);
    }

    @Override
    public List<Integer> getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return super.getResult(cs, columnIndex);
    }

    private List<Integer> convert(String str) {
        List<Integer> list = JsonUtils.parseArray(str, Integer.class);
        return list;
    }
}

你可能感兴趣的:(mybatis)