ibatis存儲過程
『壹』 ibatis調用返回遊標的存儲過程,沒有輸入參數的
<parameterMap type="map" id="LeaveApplyDetailMap">
<parameter property="resultCode" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
<parameter property="resultData" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
</parameterMap>
<!-- 檢查請假日期是否有效 -->
<select id="LeaveCheck" parameterMap="LeaveApplyDetailMap">
CALL PKG_ATT.SP_Get_LeaveCheck(#{strEmployeeNo},#{beginDate},#{endDate},#{typeNo},#{resultCode},#{resultData})
</select>
『貳』 spring+ibatis 調用Oracle存儲過程出錯
jdbcType應該採用標準的數據類型,varchar2是oracle自定義的,非標準的。
改成 jdbcType="VARCHAR" 再試試
『叄』 ibatis調用ms sqlSERVER 存儲過程結果集
<?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 namespace="UserDaoSqlMap">
<typeAlias alias="user" type="org.kylin.emap.bean.UserBean"/>
<resultMap id="userResultMap" class="user">
<result property="id" column="id"/>
<result property="loginName" column="login_name"/>
<result property="loginPasswd" column="login_passwd"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="phone" column="phone" typeHandler="org.kylin.emap.util.ibatis.PgsqlStringArrayTypeHandler"/>
<result property="privilege" column="privilege" typeHandler="org.kylin.emap.util.ibatis.PgsqlIntegerArrayTypeHandler"/>
</resultMap>
<parameterMap id="loginUserParameters" class="java.util.HashMap">
<parameter property="result" jdbcType="OTHER" javaType="java.sql.ResultSet" mode="OUT"/>
<parameter property="loginName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="loginPasswd" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
</parameterMap>
<select id="checkUser" resultMap="userResultMap" parameterClass="user">
SELECT id, login_name, login_passwd, name, sex, phone, privilege
FROM t_user
WHERE login_name = #loginName# AND login_passwd = #loginPasswd#
</select>
<procere id="loginUser" resultMap="userResultMap" parameterMap="loginUserParameters" >
{? = call f_login_user(?,?)}
</procere>
</sqlMap>
在userResultMap中有typeHandler的描述,如phone欄位,用org.kylin.emap.util.ibatis.PgsqlStringArrayTypeHandler這個類來處理數組類型,這個類是實現了iBatis的com.ibatis.sqlmap.client.extensions.TypeHandlerCallback,iBatis是很強啊,很方便擴展。
先看procere的定義,用到了loginUserParameters做參數,返回userResultMap。
loginUserParameters描述了3個參數,按照調用方式: ? = call f_login_user(?, ?)的順序,第一個參數是返回結果集的,這里的jdbcType填寫OTHER,javaType填寫java.sql.ResultSet,如果是ORACLE的存儲過程通過游標返回結果集的話,jdbcType應該填寫為ORACLECURSOR,看來iBatis專門為ORACLE做了開發,不過在PostgreSQL中不能用ORACLECURSOR,得用OTHER。
好了,現在我們看看DAO中如何通過SqlMapClient得到這個結果集:
public UserBean loginUser(String loginName, String loginPasswd) throws DaoException {
HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("loginName", loginName);
parameters.put("loginPasswd", loginPasswd);
return (UserBean)getSqlMapClientTemplate().queryForObject("UserDaoSqlMap.loginUser", parameters);
}
當前這個例子,存儲過程通過游標返回了一行數據,我們可以用queryForObject得到結果集,結果集也自動影射為UserBean了,很方便使用。
『肆』 ibatis調用oracle存儲過程返回結果為boolean的問題
<parameter property="retBool" jdbcType="boolean" javaType="java.lang.Boolean" mode="INOUT"/>
應該是布爾型的 參數類型沖突 你該下試試謝謝
『伍』 ibatis調存儲過程,出現數組越界錯誤,怎麼改
你可以把調用存儲過程時的那個proDto參數改為HashMap嘗試一下埃map裡面put一個name為PRM_IDCARD然後在put一個PRM_NAME兩個參數進去,,調用完成後獲取PRM_NAME試試。
『陸』 ibatis調用mysql存儲過程,沒有結果集返回,求高手求救
calltotalUsers(?,?,?,?)
有問題吧?
改為
calltotalUsers(#{key1},#{key2},#{key3},#{key4})
key1~key4為paramMap里對應的鍵值
『柒』 ibatis 存儲過程的 查詢
queryForList返回的是List,queryForObject返回的是Object;
to LS:ibatis可以調用存儲過程。
『捌』 封裝的ibatis怎麼調用oracle存儲過程入參
在cx_oracle 中定義一個參數比如 rec_data TBL_MY_OBJECT; 然後給予賦值 比如 rec_data.id =XXX;rec_data .DATA =XXX; 然後調用INIT_MY_TYPE(rec_data );即可。
『玖』 mybatis和ibatis的區別
1、基本信息不同
mybatis:MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。
MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將介面和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成資料庫中的記錄。
ibatis:iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO),同時還提供一個利用這個框架開發的JPetStore實例。相對Hibernate和ApacheOJB等「一站式」ORM解決方案而言,ibatis 是一種「半自動化」的ORM實現。
iBATIS 目前提供了三種語言實現的版本,包括:Java、.NET以及Ruby。
2、開發時間不同
mybatis:MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。
ibatis:iBATIS一詞來源於「internet」和「abatis」的組合,是一個由Clinton Begin在2001年發起的開放源代碼項目。
3、配置方法不同
mybatis簡化了編碼的過程,不需要去寫的實現類,直接寫一個的介面,再寫一個xml配置文件,整個mybatis就配置好了,也就是資料庫就連接好了,然後在service裡面直接調用就可以了,但是ibatis則不可以,必須要寫的實現類。mybatis是ibatis的升級版本。