mybatis typeHandler分割转换数据类型

例子

    <resultMap id="BlogMap" type="com.aya.mapper.Blog"  >
         <id column="id" property="id"/>
         <result column="content" property="content"/>
    </resultMap>

public class Blog implements Serializable{
    private Integer id;
    private String content;
    // 省略 getter,setter
}

执行查询结果:

Blog{id=1,  content='c1,c2,c3,c4'}

需求

将查询的content字段用逗号分割,变成List<String>类型的数据。

转换


public class Blog implements Serializable{
    private Integer id;
    private List<String> content;
    // 省略 getter,setter
}

那么我们只要定义一个TypeHandler 然后在设置到字段解析上就可以了

    <resultMap id="BlogMap" type="com.aya.mapper.Blog"  >
         <id column="id" property="id"/>
         <result column="content" property="content" typeHandler="com.aya.mapper.StringSplitHandler"/>
    </resultMap>

StringSplitHandler 内容如下

public class MySplitHandler implements TypeHandler<Object> {


    @Override
    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        // 不能作为参数进行查询
    }

    @Override
    public Object getResult(ResultSet rs, String columnName) throws SQLException {
        String string = rs.getString(columnName);
        if(string==null){
            return Collections.emptyList();
        }
        return Arrays.asList(string.split(","));
    }

    @Override
    public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
        String string = rs.getString(columnIndex);
        if(string==null){
            return Collections.emptyList();
        }
        return Arrays.asList(string.split(","));
    }

    @Override
    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
        String string = cs.getString(columnIndex);
        if(string==null){
            return Collections.emptyList();
        }
        return Arrays.asList(string.split(","));
    }
}

控制台输出

Blog{id=1, contents=[c1, c2, c3, c4]}

成功将String转化为List类型

猜你喜欢

转载自blog.csdn.net/mz4138/article/details/81101144