Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> iBatis storage procedure, как вызвать хранимую процедуру 
:(
    Опции темы
StreamVZ
Дата 16.2.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



Пожалуйста расскажите синтаксис вызова хранимой процедуры в iBatis из java
как описать в xml и как вызвать из кода.
спасибо
PM MAIL   Вверх
onsh76
Дата 19.2.2006, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 20.11.2005
Где: Beautiful BC

Репутация: 4
Всего: 5



Пример можно посмотреть в руководстве, Data Mapper 2.0, Developer Guide.
Смотри страницу 16.

Если твоя процедура написана под Оракл и возвращает REFCURSOR, тогда держи еще одинпример, там все по полочкам разложено.

PM MAIL   Вверх
StreamVZ
Дата 21.2.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



onsh76, спасибо
Добавлено @ 11:21
onsh76, как описывать процедуру в xml я то знал- тоже читал док, но как вызывать ее из Dao, как вызывать sql я разобрался, а вот реч идет, как вызвать из java кода эту процедуру с iBatis
PM MAIL   Вверх
onsh76
Дата 23.2.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 20.11.2005
Где: Beautiful BC

Репутация: 4
Всего: 5



Цитата(StreamVZ @ 21.2.2006, 11:17 Найти цитируемый пост)
... а вот реч идет, как вызвать из java кода эту процедуру с iBatis

Нет проблем, выделяю кусок кода из примера указанного на сайте:
Код

public static void main(String arg[]) throws Exception {
            String resource;
            Reader reader;
            List list;
            SqlMapClient sqlMap;
            resource = "test/SqlMapConfig.xml";
            reader = Resources.getResourceAsReader (resource);
            // -----------------------------------------------------------------
                // -----------------------------------------------------------------
                sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            Map map = new HashMap();
            map.put("in1", new Integer(10));
            // use queryForList because the procedure map defines a resultmap
            // for the statement
            list = sqlMap.queryForList("GetSingleEmpRs", map);
                // -----------------------------------------------------------------
                // -----------------------------------------------------------------
            System.out.println("--------------------");
            System.out.println( list );
            System.out.println("--------------------");
            
            map = new HashMap();
            map.put("in1", new Integer(10));
            // use queryForObject because the procedure map does not define a 
            // result map for the statement
            sqlMap.queryForObject("GetDoubleEmpRs", map);
            
            System.out.println("--------------------");
            System.out.println( map.get("output1"));
            System.out.println( map.get("output2"));
            System.out.println("--------------------");
            
               
        }


Теперь то же самое, но через DAO pattern реализуя его через iBatis и Spring (для простоты я только заимплементил вызов одной процедуры, котороя возвращает один рефкурсор):

Код

package mydomain.dao.ibatis;

import java.util.Collection;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

/**
 * @author onsh76
 *
 *
 */
public class StorProcDaoImpl extends SqlMapClientDaoSupport implements
        StorProcDao {
   
    
    private Log log = LogFactory.getLog(getClass());
    
    // ---------------------- getter methods ---------------------------------/
    
    public Collection getObjectsFromStorProc(int value) {
        Collection objects = null;

        Map params = new HashMap();
        params.put("in1", new Integer(value);
        params = getSqlMapClientTemplate().queryForList("GetSingleEmpRs", params);
      
        return params;
    }
 
}


Я не привел код интерфейса StorProcDao, но думаю не сложно догадаться, что его надо создать с одним единственным методом: public Collection getObjectsFromStorProc(int value).
Я также предполагаю, что Вам известно как создать sqlMap файл ниже, и соответсвенно задекларить StorProcDao в spring-овском dataAccessContext файле. Если нужна доп.помощь (связка со spring-ом) , свисти - покажу пример полностью...
Код

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap>

    <typeAlias alias="Employee" type="test.Employee" />
    
    <resultMap id="employee-map" class="Employee">
        <result property="name" column="ENAME" />
        <result property="employeeNumber" column="EMPNO" />
        <result property="departmentNumber" column="DEPTNO" />
    </resultMap>
    
    <parameterMap id="single-rs" class="map" >
        <parameter property="in1" jdbcType="int" javaType="java.lang.Integer" mode="IN"/>
        <parameter property="output1" jdbcType="ORACLECURSOR" mode="OUT"/>      
    </parameterMap>
     
    <procedure id="GetSingleEmpRs" parameterMap="single-rs" resultMap="employee-map">
         { call scott.example.GetSingleEmpRS(?, ?) }
    </procedure>
    
    <parameterMap id="double-rs" class="map" >
        <parameter property="in1" jdbcType="int" javaType="java.lang.Integer" mode="IN"/>
        <parameter property="output1" jdbcType="ORACLECURSOR" mode="OUT" resultMap="employee-map" />
        <parameter property="output2" jdbcType="ORACLECURSOR" mode="OUT" resultMap="employee-map" />        
    </parameterMap>
    
    <procedure id="GetDoubleEmpRs" parameterMap="double-rs" >
        { call scott.example.GetDoubleEmpRS(?, ?, ?) }
    </procedure>
</sqlMap>




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0723 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.