Как создать запрос во время выполнения с iBATIS - PullRequest
2 голосов
/ 03 октября 2009

Как я могу создать запрос во время выполнения, используя ibatis (Java)? Я хочу, чтобы имя таблицы было динамическим. Например, у меня есть этот XML-файл:

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

Здесь идентификатор является динамическим, поскольку он передается в качестве параметра. Но как я могу сделать имя таблицы динамическим? Я хочу выбрать из таблицы контакт, контакт1, контакт2 .... но теперь я буду называть имя таблицы до времени выполнения.

Я знаю, что вы можете создать запрос во время выполнения с ibatis 3.0, возможно ли сделать это с ibatis 2.3.4?

Ответы [ 2 ]

1 голос
/ 03 октября 2009

Я обнаружил, что вы можете достичь этого.

    <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);
0 голосов
/ 26 января 2015

Создание полного запроса с помощью 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...