2009-10-03 54 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); 
}