一、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。还是加上比较清晰

{call pro_hello(#{uname,mode=IN,jdbcType=VARCHAR},#{result,mode=OUT,jdbcType=VARCHAR})}

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 param = new HashMap();

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函数增加学生后返回成功与否的字符串

{#{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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐