2009-10-03 7 views
2

Comment créer une requête lors de l'exécution avec ibatis (Java)? Je souhaite que le nom de la table soit dynamique. Par exemple, j'avoir ce fichier xml:Comment créer une requête à l'exécution avec iBATIS

<resultMap id="result" class="Contact"> 
    <result property="id" column="id"/> 
    <result property="firstName" column="firstName"/> 
    <result property="lastName" column="lastName"/> 
    <result property="email" column="email"/> 
</resultMap> 

<select id="getById" resultMap="result"> 
     select * from contact where id=#id# 
</select> 

Ici, l'identifiant est dynamique car il est passé en paramètre. Mais comment puis-je rendre le nom de la table dynamique? Je veux sélectionner à partir du contact de la table, contact1, contact2 .... mais je vais maintenant le nom de la table jusqu'à l'exécution.

Je sais que vous pouvez créer la requête à l'exécution avec ibatis 3.0 est-il possible de le faire avec ibatis 2.3.4?

Répondre

1

J'ai trouvé que vous pouvez y parvenir.

<select id="getRighe" 
remapResults="true" 
resultMap="resultRighe" 
parameterClass="java.util.Map"> 
select * from 
$tablePrefix$_righe 
where IDUser = #IDUser# 
</select> 

code Java:

param.put("IDUser", IDUser); 
param.put("tablePrefix", "NAG"); 
utente = (Riga)getSqlMapClientTemplate().queryForObject("getRighe", param); 
+1

Merci pour répondre à votre propre question, cela m'a aidé. –

0

Création requête complète avec iBatis3 (non seulement de nom de la table):

private void createSelect(String statementId, String sql, Class<?> resultType) { 
    Configuration ibatisConfig = session.getConfiguration(); 
    SqlSource sqlSource = new SqlSourceBuilder(ibatisConfig).parse(sql, Map.class); 
    Builder statement = new MappedStatement.Builder(ibatisConfig, statementId, sqlSource, SqlCommandType.SELECT); 
    List<ResultMapping> resultMapList = new ArrayList<ResultMapping>(); 
    ResultMap resultMap = new ResultMap.Builder(ibatisConfig, statementId, resultType, resultMapList, true).build(); 
    ibatisConfig.addResultMap(resultMap); 
    List<ResultMap> resultMaps = new ArrayList<ResultMap>(); 
    resultMaps.add(resultMap); 
    statement.resultMaps(resultMaps); 
    ibatisConfig.addMappedStatement(statement.build()); 
} 

Pour l'exécuter:

private List<Object> executeSelect(String sqliteStatementId, Map<String, Object> params) { 
     return session.selectList(sqliteStatementId, params); 
} 
Questions connexes