在MyBatis中,可以通過繼承org.apache.ibatis.type.BaseTypeHandler
或實現org.apache.ibatis.type.TypeHandler
接口來自定義集合的處理方式。
首先,創建一個自定義的TypeHandler類,例如CustomListTypeHandler,實現TypeHandler接口,實現其中的方法:
public class CustomListTypeHandler implements TypeHandler<List<String>> {
@Override
public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
// 將List轉換為字符串,并設置到PreparedStatement中
ps.setString(i, StringUtils.join(parameter, ","));
}
@Override
public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
// 獲取結果集中的字符串并轉換為List
return Arrays.asList(rs.getString(columnName).split(","));
}
@Override
public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
// 獲取結果集中的字符串并轉換為List
return Arrays.asList(rs.getString(columnIndex).split(","));
}
@Override
public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
// 獲取存儲過程返回結果中的字符串并轉換為List
return Arrays.asList(cs.getString(columnIndex).split(","));
}
}
接著,在配置文件中注冊這個自定義的TypeHandler:
<typeHandlers>
<typeHandler handler="com.example.CustomListTypeHandler"/>
</typeHandlers>
最后,在Mapper接口中指定自定義的TypeHandler:
@Results({
@Result(column = "column_name", property = "propertyName", typeHandler = CustomListTypeHandler.class)
})
@Select("SELECT * FROM table_name")
List<Entity> selectData();
這樣,就可以自定義集合在MyBatis中的處理方式了。