1.实体类

@Data
public class User implements Serializable {
private Integer id;

private String userName;

private String realName;

private String password;

private Integer age;

private Integer dId;

private ArrayList<String> hobbies;

}

2.自定义类型处理器

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(ArrayList.class)
public class MyTypeHandler extends BaseTypeHandler<ArrayList<String>> {

@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, ArrayList<String> strings, JdbcType jdbcType) throws SQLException {
StringBuffer stringBuffer = new StringBuffer();
for (int i1 = 0; i1 < strings.size(); i1++) {
stringBuffer.append(strings.get(i)+",");
}
preparedStatement.setString(i,stringBuffer.toString());
}

@Override
public ArrayList<String> getNullableResult(ResultSet resultSet, String s) throws SQLException {
ArrayList<String> result = new ArrayList<String>();
String string = resultSet.getString(s);
String[] split = string.split(",");
for (int i = 0; i < split.length; i++) {
result.add(split[i]);
}
return result;
}

@Override
public ArrayList<String> getNullableResult(ResultSet resultSet, int n) throws SQLException {
ArrayList<String> result = new ArrayList<String>();
String string = resultSet.getString(n);
String[] split = string.split(",");
for (int i = 0; i < split.length; i++) {
result.add(split[i]);
}
return result;
}

@Override
public ArrayList<String> getNullableResult(CallableStatement callableStatement, int n) throws SQLException {
ArrayList<String> result = new ArrayList<String>();
String string = callableStatement.getString(n);
String[] split = string.split(",");
for (int i = 0; i < split.length; i++) {
result.add(split[i]);
}
return result;
}
}

3.xml配置

<resultMap id="BaseResultMap" type="user">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="userName" column="user_name" jdbcType="VARCHAR" />
<result property="realName" column="real_name" jdbcType="VARCHAR" />
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="age" column="age" jdbcType="INTEGER"/>
<result property="hobbies" column="hobbies" jdbcType="VARCHAR" typeHandler="com.dxy.learn.type.MyTypeHandler"/>
</resultMap>
<select id="selectUserById" resultMap="BaseResultMap" statementType="PREPARED" >
select
*
from t_user where id = #{id}
</select>

4.测试

mybatis 自定义类型处理器_spring