之前发表过一个mybaits在mysql中操作json的文章,今天就来提一下在之前出现的自定义数据处理类的用法。
今天拿操作List数组作为测试,以往我们需要在往数据库中存或者在数据库取出来时转换类型或者对值做某些处理,这样十分不方便,在这里我们就可以继承BaseTypeHandler<T>,自己实现各种转换。
看下面源码是List<String>类型的转换。一个setxxx方法,表示向PreparedStatement里面设置值。三个getxxx方法,一个是根据列名获取值,一个是根据列索引位置获取值,最后一个是存储过程。
package com.inspur.archives.dao.handler; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import edu.emory.mathcs.backport.java.util.Arrays; @SuppressWarnings("unchecked") public class ListTypeHandler extends BaseTypeHandler<List<String>>{ @Override public void setNonNullParameter(PreparedStatement ps, int i, List<String> param, JdbcType jdbcType) throws SQLException { String str = String.join("", param); ps.setString(i, str); } @Override public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException { String result = rs.getString(columnName); return Arrays.asList(result.split(",")); } @Override public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String result = rs.getString(columnIndex); return Arrays.asList(result.split(",")); } @Override public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String result = cs.getString(columnIndex); return Arrays.asList(result.split(",")); } }
在mapper.xml中
插入数据时候使用
#{filed, typeHandler=*.*.ListTypeHandler}
取数据时候自定义resultMap
<result column="column_filed" typeHandler="*.*.ListHandler" property="field" />