ibatismysql存儲過程
『壹』 ibatis調用mysql存儲過程,沒有結果集返回,求高手求救
calltotalUsers(?,?,?,?)
有問題吧?
改為
calltotalUsers(#{key1},#{key2},#{key3},#{key4})
key1~key4為paramMap里對應的鍵值
『貳』 ibatis調用存儲過程,存儲過程可以返回多個cursor嗎
一個存儲過程中可以定義多個cursor啊。游標可以嵌套執行,也可以順序執行。不過記得要將found這個變數的值在需要的地方設置為true。否則就不繼續執行了。
『叄』 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了,很方便使用。
『肆』 有人在嗎 mysql + java +ibatis 調用存儲過程卡死了 但是存儲過程已經執行成功了,資料庫數據已經進去了
你看下你在java的層,用什麼方法調用的存儲過程,是Insert還是query
『伍』 ibatis 存儲過程的 查詢
queryForList返回的是List,queryForObject返回的是Object;
to LS:ibatis可以調用存儲過程。
『陸』 Ibatis如何調用存儲過程
存儲過程的調用是使用<procere元素來調用的, 下面是一個使用帶輸出參數的存儲過程的例子:
<parameterMap id=swapParameters class=map
�0�2�0�2<parameter property=email1″ jdbcType=VARCHAR javaType=java.lang.String mode=INOUT/
�0�2�0�2<parameter property=email2″ jdbcType=VARCHAR javaType=java.lang.String mode=INOUT/
</parameterMap
如果你的存儲過程返回一個結果集,那麼使用queryForList()或者queryForObject來調用, 如果你的存儲過程既返回結果集又更新資料庫數據,那麼需要配置<transactionManager的commitRequired=’true’
如果存儲過程不返回結果集,或者僅僅以輸出參數的形式返回結果集,那麼應該使用update()方法。
<procere id=swapEmailAddresses parameterMap=swapParameters
『柒』 mysql和iBATIS性能優化
你這個項目做性能優化,可以從三個方面著手:
1. Mysql資料庫本身的優化,參考《Mysql性能優化全功略》http://www.cndw.com/tech/data/2006041338931.asp
2. Sql語句和存儲過程的優化,這里有比較系統的資料:http://www.crazycoder.cn/Tag/715/Index.html
3. 使用伺服器端緩存技術,可以藉助於第三方緩存實現,如ecache, jbossCache等,自己查資料
上面三條3效果最明顯,2次之,1效果不一定明顯但一勞永逸。
『捌』 請教一下iBatis中怎麼寫 set @a:=0;select @a:=@a+1 from table這種形式的語句
是存儲過程,以下是mysql查詢時帶行號的結果,供你參考:
SELECTtemp.*FROM(SELECT(@rowNum:=@rowNum+1)ASrow_no,t.*FROMtaskt,(SELECT(@rowNum:=0))bWHEREt.is_start=1ORDERBYt.execute_timeASC,t.create_timeASC)tempWHEREtemp.seller_id=384652432