在MyBatis中,可以通过继承org.apache.ibatis.type.BaseTypeHandler
或实现org.apache.ibatis.type.TypeHandler
接口来自定义集合的处理方式。
首先,创建一个自定义的TypeHandler类,例如CustomListTypeHandler,实现TypeHandler接口,实现其中的方法:
public class CustomListTypeHandler implements TypeHandler> { @Override public void setParameter(PreparedStatement ps, int i, List
parameter, JdbcType jdbcType) throws SQLException { // 将List转换为字符串,并设置到PreparedStatement中 ps.setString(i, StringUtils.join(parameter, ",")); } @Override public List getResult(ResultSet rs, String columnName) throws SQLException { // 获取结果集中的字符串并转换为List return Arrays.asList(rs.getString(columnName).split(",")); } @Override public List getResult(ResultSet rs, int columnIndex) throws SQLException { // 获取结果集中的字符串并转换为List return Arrays.asList(rs.getString(columnIndex).split(",")); } @Override public List getResult(CallableStatement cs, int columnIndex) throws SQLException { // 获取存储过程返回结果中的字符串并转换为List return Arrays.asList(cs.getString(columnIndex).split(",")); } }
接着,在配置文件中注册这个自定义的TypeHandler:
最后,在Mapper接口中指定自定义的TypeHandler:
@Results({ @Result(column = "column_name", property = "propertyName", typeHandler = CustomListTypeHandler.class) }) @Select("SELECT * FROM table_name") ListselectData();
这样,就可以自定义集合在MyBatis中的处理方式了。