is it possible to map a string field with a particular format like:
aaa,bbb,ccc,ddd
into a List having elements [aaa, bbb, ccc, ddd] using iBatis?
What I need is to have in my model something like:
public class Request{
private List<String> fieldOne;
public List<String> getFieldOne(){....}
public void setFieldOne(){....}
}
even if in my table the 开发者_运维百科field is a simple string. Is this possible?
Thanks Roberto
You can do it through a CustomType Handler:
For example, in your mapping you define:
<result column="FIELD_ONE" property="fieldOne"
jdbcType="VARCHAR" typeHandler="com.xxx.StringSplitTypeHandlerCallBack" />
and then you code your class StringSplitTypeHandlerCallBack implements TypeHandlerCallback
, which would call String.split()
inside the getResult()
method.
UPDATE: Of course, if this conversion is only need for one field of one class, it might be more simple to define a pair of alternative setter/getters getFieldOneAsString(), setFieldOneAsString()
in your class, and use property="fieldOneAsString"
in your mapping
Use TypeHandler, Example:
<result property="strList" column="rp_str" typeHandler="com.yourproject.repository.orm.StringSplitTypeHandler" />
public class StringSplitTypeHandler implements TypeHandler<List<String>> {
@Override
public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
if (parameter != null) {
ps.setString(i, parameter.toString());
}
}
@Override
public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
String columnValueStr = rs.getString(columnName);
if (columnValueStr != null) {
return Arrays.asList(columnValueStr.replaceAll("[ ]", "").split(","));
}
return null;
}
@Override
public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
String columnValueStr = rs.getString(columnIndex);
if (columnValueStr != null) {
return Arrays.asList(columnValueStr.replaceAll("[ ]", "").split(","));
}
return null;
}
@Override
public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
String columnValueStr = cs.getString(columnIndex);
if (columnValueStr != null) {
return Arrays.asList(columnValueStr.replaceAll("[ ]", "").split(","));
}
return null;
}
}
I'm not sure why you want iBatis to do it, but you could just use String.split() to do the work, and map the results.
精彩评论