Mybatis調用Oracle中的存儲過程和function
一、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 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 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})}
</select>
StudentDTO除了上述出現的學生信息字段外還需要String類型的result字段。
原帖地址:
https://chenjc-it.iteye.com/blog/1443432
https://shen84121062.iteye.com/blog/1213857
最後更新:2017-04-03 20:19:07