一、mybatis调用存储过程
1 在数据库中创建以下的存储过程
create or replace procedure pro_hello(p_user_name in varchar2,p_result out varchar2) is
begin
p_result := 'hello,' || p_user_name;
end;
2 编写sql映射文件mapper.xml
statementtype里的callable是标注此sql为存储过程。
parametertype是标注要传的参数,看了一些资料不写parametertype的话默认传map。还是加上比较清晰
<select id="prohello" parametertype="java.util.map" statementtype="callable">
{call pro_hello(#{uname,mode=in,jdbctype=varchar},#{result,mode=out,jdbctype=varchar})}
</select>
3 编写java代码调用存储过程
public class proceduretest {
public static void main(string[] args) throws ioexception {
string resource = "mybatis.cfg.xml";
reader reader = resources.getresourceasreader(resource);
sqlsessionfactory ssf = new sqlsessionfactorybuilder().build(reader);
sqlsession session = ssf.opensession();
try {
map<string, string> param = new hashmap<string, string>();
param.put("uname", "zhangsan");
param.put("result", "");
string returnvalue = (string) session.selectone("user.prohello", param);
system.out.println("message=" + param.get("uname"));
system.out.println("result=" + param.get("result"));
system.out.println("returnvalue=" + returnvalue);
} catch (exception e) {
e.printstacktrace();
} finally {
session.close();
}
}
}
二、mybatis调用function
function带有返回值,假设一个oracle函数增加学生后返回成功与否的字符串
<select id="ismember" statementtype="callable" parametertype="cn.studentdto">
{#{result,mode=out,jdbvtype=varchar} = call
addstudent(#{num,mode=in,jdbctype=decimal},#{name,mode=in,jdbctype=varchar},#{rollinyear,mode=in,jdbctype=date},#{age,mode=out,jdbctype=integer})}
studentdto除了上述出现的学生信息字段外还需要string类型的result字段。
原帖地址:
http://chenjc-it.iteye.com/blog/1443432
http://shen84121062.iteye.com/blog/1213857