Цитата(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>
|
|