当前位置:首页 » 存储配置 » ibatismysql存储过程

ibatismysql存储过程

发布时间: 2022-04-26 13:14:28

‘壹’ 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
热点内容
天成报警器安装密码是多少 发布:2024-11-18 18:37:05 浏览:452
阿里云存储服务器买那个 发布:2024-11-18 18:36:27 浏览:231
安卓如何保养屏幕 发布:2024-11-18 18:19:42 浏览:843
rom编程器 发布:2024-11-18 18:18:12 浏览:415
xp文件夹删除不了 发布:2024-11-18 18:13:03 浏览:228
javalinux下载文件 发布:2024-11-18 18:01:46 浏览:148
相册里的照片如何镜像翻转安卓 发布:2024-11-18 17:53:17 浏览:682
慧编程五子棋 发布:2024-11-18 17:53:12 浏览:950
王者荣耀如何把安卓区的帐号改为苹果区的 发布:2024-11-18 17:43:13 浏览:121
linux释放空间 发布:2024-11-18 17:43:01 浏览:493