call mysql store procedure in ibatis with spring
1.sqlmap文件编写
1)无参存储过程
<procedure id="testp">
{call test}
</procedure>
2)有参存储过程
1)无out参数
<parameterMap class="java.util.HashMap" id="roleMap">
<parameter property="userID" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="name" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="sex" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="icon" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="insertRole" parameterMap="roleMap">
<![CDATA[
{call insertRole(?,?,?,?)}
]]>
</procedure>
2)有out参数
<parameterMap class="java.util.HashMap" id="userMap_4">
<parameter property="userName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="number" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
</parameterMap>
<procedure id="checkUserName" parameterMap="userMap_4">
{call checkUserName(?,?)}
</procedure>
注意点:
I.parameterMap中定义的参数顺序与procedure中调用的存储过程的参数顺序相同
II.parameterMap中定义属性的jdbcType,javaType,mode要仔细
III.procedure中传参用parameterMap,小心用错parameterClass
2.Java中的调用
1)仅带in参数存储过程调用:
Map p = new HashMap();
p.put("userID",new Integer(role.getId()));
p.put("name",role.getName());
p.put("sex", new Integer(role.getSex()));
p.put("icon", new Integer(role.getIcon()));
getSqlMapClientTemplate().queryForObject("insertRole",p);
2)带有out参数存储过程调用:
public int checkUserName(String name){
HashMap<String,Object> p=new HashMap<String,Object>();
p.put("userName", name);
p.put("number", null);
getSqlMapClientTemplate().insert("checkUserName", p);
return (Integer)p.get("number");
}
注意:调用带有out参数的存储过程要用insert,如果用queryFor...会卡死在调用处..
3.有参返回结果集存储过程
1).存储过程:
在MySQL 5.0中,游标只能使用在存储过程中.不过,如果你在 SELECT 语句中如果没有打开游标的话,那么结果集会被直接发送给客户端,也可以 SELECT INTO 到变量中
如果你在存储过程或存储函数中执行一条普通的 SELECT 语句,那么结果集会直接返回给客户端.需要使用MySQL 4.1的客户端-服务器协议来支持它,这意味着 - 例如在PHP中,就需要用 mysqli 扩展而非 mysql 扩展才能实现.
create procedure getRoleByUserID(in userID int)
label_proc:begin
select * from role where user_id=userID;
end label_proc
2)sqlMap:
<parameterMap class="java.util.HashMap" id="roleMap_1">
<parameter property="userID" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="getRoleByUserID" parameterMap="roleMap_1" resultClass="role">
<![CDATA[
{call getRoleByUserID(?)}
]]>
</procedure>
我所犯过的错误:围绕着oracle的做法,在存储过程中设置一个out sys_outcursor参数,然后在parameter中设置一个hashmap results接收这个参数....折腾了几个小时...
这里的关键点就在于,把这个存储过程当一个普通的select元素,设置个resultClass来格式化结果集就行了.
3 java中调用:
调用就像普通select一样调用
Map p = new HashMap();
p.put("userID", userID);
Role role=(Role)getSqlMapClientTemplate().queryForObject("getRoleByUserID",p);
System.out.println("成功:"+role.getId()+"->"+role.getName());
分享到:
相关推荐
简单易入手,使用mysql数据库进行数据管理
ibatis与spring 框架整合
iBatis和Spring整合 iBatis和Spring整合
内容包里面是源代码,运行该例子的方式就是,使用里面的sql...使用cmd进入该解压包,运行 java -jar *.jar ibatis2spring.jar 就可以了。欲了解代码的详细,请访问作者博客,搜索《ibatis + Spring 多表查询》文章。
整合了ibatis和spring 采用了数据源的配置 ibatis有详细的解释
ibatis与spring的整合,文档doc格式,学习可用
使用ibatis+spring+struts2 做的开发例子 帮助大家一起学习ibatis的整合
最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 <bean id="sqlMapClient" class="org.spring...
ibatis+spring+cxf+mysql搭建webservice的客户端,文章地址在http://blog.csdn.net/cenyi2013/article/details/17315755. 服务端源码的下载地址在http://download.csdn.net/detail/cenyi2012/6712729
Spring + Ibatis 与mysql集群集成
backbone+bootstrap+ibatis+spring例子
简单整合了struts1+ibatis+Spring demo
ibatis与spring整合,内附文档
Struts2-Ibatis+spring.rar Struts2-Ibatis+spring.rar Struts2-Ibatis+spring.rar Struts2-Ibatis+spring.rar Struts2-Ibatis+spring.rar
ibatis+Spring+struts2整合实例
一个iBatis与Spring整合的例子一个iBatis与Spring整合的例子一个iBatis与Spring整合的例子
spring ibatis 配置spring ibatis 配置spring ibatis 配置spring ibatis 配置
Ibatis和Spring整合例子,实现增删改查功能.
这个Project是关于ibatis 和 spring 框架整合的Demo。 需要向大家说明一下几个需要注意的地方: 1.这个Demo使用的数据库为mysql数据库,所以jar中引用了mysql的一个jar包。 2.ibatis和spring的整合主要是spring的...
spring mvc+ibatis+spring注解