2009-10-03 35 views
2

如何在運行時使用ibatis(Java)創建查詢? 我希望表名是動態的。 比如我有這樣的XML文件:如何在運行時使用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> 

在這裏,因爲它是作爲參數傳遞的ID是動態的。 但我怎樣才能使表名稱動態? 我想從表聯繫人,聯繫人1,聯繫人2中選擇....但我現在將表名直到運行時。

我知道你可以在運行時使用ibatis 3.0創建查詢是否可以使用ibatis 2.3.4來實現?

回答

1

我發現你可以做到這一點。

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

Java代碼:

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

謝謝回答您的自己的問題,它幫助了我。 – 2011-05-25 17:10:52

0

創建完整的查詢與iBatis3(不僅是表名):

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

執行它:

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