2010-04-22 13 views
4

est-il possible de mapper un champ de chaîne avec un format particulier comme:cartographie iBatis: mapper un champ de chaîne dans une liste <String>

aaa, bbb, ccc, ddd

dans une liste comportant des éléments [aaa , bbb, ccc, ddd] en utilisant iBatis?

Ce que je besoin est d'avoir dans mon quelque chose comme modèle:

public class Request{ 
    private List<String> fieldOne; 
    public List<String> getFieldOne(){....} 
    public void setFieldOne(){....} 
} 

même si dans ma table le champ est une chaîne simple. Est-ce possible?

Merci Roberto

Répondre

5

Vous pouvez le faire à travers un CustomType Handler:

Par exemple, dans votre correspondance vous définissez:

<result column="FIELD_ONE" property="fieldOne" 
     jdbcType="VARCHAR" typeHandler="com.xxx.StringSplitTypeHandlerCallBack" /> 

puis vous codez votre class StringSplitTypeHandlerCallBack implements TypeHandlerCallback, qui remettrait String.split() dans la méthode getResult().

MISE À JOUR: Bien sûr, si cette conversion est nécessaire uniquement pour un champ d'une classe, il pourrait être plus simple de définir une paire de setter alternative/getters getFieldOneAsString(), setFieldOneAsString() dans votre classe, et utiliser property="fieldOneAsString" dans votre cartographie

0

Je ne sais pas pourquoi vous voulez iBatis le faire, mais vous pouvez simplement utiliser String.split() pour faire le travail, et cartographier les résultats.

+0

Eh oui, je sais comment faire sur le java côté, je voulais juste savoir s'il serait possible de le faire automatique avec ibatis – Roberto

2

utilisation TypeHandler, Exemple:

<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; 
    } 

}