我实体类中有一个Object[]属性,存到数据库时呀转换成string,此时就可以用到typeHandler:
@MappedTypes(value = {Object[].class})
@MappedJdbcTypes(value = JdbcType.VARCHAR)
public class ArrayStringHandler extends BaseTypeHandler<Object[]> {
/**
* 数组转string并保存到数据库
*
* @param ps
* @param i
* @param parameter
* @param jdbcType
* @throws SQLException
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object[] parameter, JdbcType jdbcType) throws SQLException {
StringBuilder builder = new StringBuilder();
for (int i1 = 0; i1 < parameter.length; i1++) {
builder.append(parameter[i1]);
if (i1 == parameter.length - 1) {
break;
}
builder.append("-");
}
System.out.println(builder.toString());
ps.setString(i, builder.toString());
}
/**
* 读取数据时string转数组
*
* @param rs
* @param columnName
* @return
* @throws SQLException
*/
@Override
public Object[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
String s = rs.getString(columnName);
String[] strings = s.split("-");
Object[] objects = new Object[strings.length];
System.arraycopy(strings, 0, objects, 0, strings.length);
return objects;
}
@Override
public Object[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String s = rs.getString(columnIndex);
String[] strings = s.split("-");
Object[] objects = new Object[strings.length];
System.arraycopy(strings, 0, objects, 0, strings.length);
return objects;
}
@Override
public Object[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String s = cs.getString(columnIndex);
String[] strings = s.split("-");
Object[] objects = new Object[strings.length];
System.arraycopy(strings, 0, objects, 0, strings.length);
return objects;
}
}
<result column="methodArgs" property="methodArgs" typeHandler="cn.myllxy.myllxycrm.mybatis.ArrayStringHandler"/>