赞
踩
在实际项目中,有一个物品表,其中有一个规格的字段,存入了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()]); }
由于在项目中使用了mybatisplus,所以使用如下:
/**
* 商品货品的规格列表
*/
@TableField(value = "specifications",el = "specifications,typeHandler=com.seven.wechatshop.shopapi.typehandle.StringArrayTypeHandler")
private String[] specifications;
但是上面的代码,并没有生效。后来阅读文档,发现是缺少了一个配置。如下
//注意使用了plus的是添加下面这个
mybatis-plus.type-handlers-package = com.seven.wechatshop.shopapi.typehandle
如果只是mybatis,那么添加的配置为
mybatis.type-handlers-package=com.seven.wechatshop.shopapi.typehandle
希望对大家有帮助~
由于也是第一次使用mybatis-plus,有很多不熟悉的地方,但是渐渐熟悉以后,确实方便了很多,加快了开发的节奏和步伐。下面附上,一些条件参数说明
条件参数说明
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。