当前位置:   article > 正文

Mybatis中TypeHandler的使用_mybatis-plus typehandlerspackage

mybatis-plus typehandlerspackage
背景

在实际项目中,有一个物品表,其中有一个规格的字段,存入了JSON数组的字符串,但是后续在使用实体类的过程中,发现些不方便,到处要转 String 和 String[]很不方便。因此希望可以直接映射。

解决

发现网上有一个TypeHandler可以做到枚举和数据字段的相互对应,那么用来做数组和String的转化应该也是可以的。代码如下:

@MappedTypes({String[].class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class StringArrayTypeHandler implements TypeHandler<String[]> {
    @Override
    public void setParameter(PreparedStatement ps, int i, String[] parameter, JdbcType jdbcType) throws SQLException {
        if (parameter == null)
            ps.setNull(i, Types.VARCHAR);
        else {
           JSONArray array =  new JSONArray(Arrays.asList(parameter));

            ps.setString(i, array.toString());
        }
    }

    @Override
    public String[] getResult(ResultSet rs, String s) throws SQLException {

        String columnValue = rs.getString(s);
        return this.getStringArray(columnValue);
    }

    @Override
    public String[] getResult(ResultSet rs, int columnIndex) throws SQLException {
        String columnValue = rs.getString(columnIndex);
        return this.getStringArray(columnValue);
    }

    @Override
    public String[] getResult(CallableStatement cs, int i) throws SQLException {
        String columnValue = cs.getString(i);
        return this.getStringArray(columnValue);

    }

    private String[] getStringArray(String columnValue) {

        if (columnValue == null)
            return null;
        JSONArray jsonArr = JSONArray.parseArray(columnValue);

        return  jsonArr.toArray(new String[jsonArr.size()]);
    }

  • 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

由于在项目中使用了mybatisplus,所以使用如下:

 /**
     * 商品货品的规格列表
     */
    @TableField(value = "specifications",el = "specifications,typeHandler=com.seven.wechatshop.shopapi.typehandle.StringArrayTypeHandler")
    private String[] specifications;
  • 1
  • 2
  • 3
  • 4
  • 5

但是上面的代码,并没有生效。后来阅读文档,发现是缺少了一个配置。如下

//注意使用了plus的是添加下面这个
mybatis-plus.type-handlers-package = com.seven.wechatshop.shopapi.typehandle

  • 1
  • 2
  • 3

如果只是mybatis,那么添加的配置为

mybatis.type-handlers-package=com.seven.wechatshop.shopapi.typehandle
  • 1

希望对大家有帮助~
由于也是第一次使用mybatis-plus,有很多不熟悉的地方,但是渐渐熟悉以后,确实方便了很多,加快了开发的节奏和步伐。下面附上,一些条件参数说明
条件参数说明

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号