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 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})}  
</select>

StudentDTO除了上述出现的学生信息字段外还需要String类型的result字段。

原帖地址:

http://chenjc-it.iteye.com/blog/1443432

http://shen84121062.iteye.com/blog/1213857

时间: 2024-10-27 12:18:56

Mybatis调用Oracle中的存储过程和function的相关文章

Java 调用Oracle中的存储过程

--建表 SQL> create table TBook(bookId number(8),bookName varchar2(50),publishHouse varchar2(50)); --编写过程 --in:输入参数:out:输出参数 SQL> create or replace procedure sp_pro7(spBookId in number,spName in Varchar2,spPublishHost in varchar2) is begin insert into

java调用Oracle中的存储过程与存储函数

1 //调用存储过程 2 public static void testPro(){ 3 String driver = "oracle.jdbc.OracleDriver"; 4 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; 5 Connection conn = null; 6 CallableStatement cs = null; 7 8 try { 9 Class.forName(driver)

Mybatis调用Oracle中的函数有返回值

本身这个项目后台是用SSM框架,试了网上好多种有返回值的方法返回都是空; 下面是我调用方法: 这是我的函数 我在Mybatis的写法是: SELECT DEAL_EBOND_ICODE_DATA(#{iCode,jdbcType=VARCHAR}) AS A from dual 在DAO层 这种写法可以直接获取返回值,而且和其他一般的方法没什么区别! 原文地址:https://www.cnblogs.com/zhangqb/p/11137409.html

Oracle中的存储过程

 pl/sql编程语言是Oracle中操作数据库最快的语言,而存储过程本质就是pl/sql,所以通过存储过程来对数据库进行CRUD是最有效的. 不再使用JDBC来进行CRUD操作,因为使用JDBC来进行CRUD操作效率低. 所以,Java通过调用存储过程,来间接调用pl/sql,达到对数据库的CRUD操作. 我们可以把CRUD操作封装到存储过程中,在程序中,调用存储过程即可. 以下是例子:来自于Oracle讲师赵强 --打印Hello World /* 调用存储过程 1. exec sayH

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

MyBatis在Oracle中插入数据并返回主键的问题解决

引言:  在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle, Spring 3.2   SQL Snippet in XML Configuration: <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo"> <selectKey resultType="

Oracle中的存储过程简单例子

---创建表 create table TESTTABLE ( id1  VARCHAR2(12), name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE (ID1, NAME) values ('1', 'zhangsan'); insert into TESTTABLE (ID1, NAME) values ('2', 'lisi'); insert into TESTTABLE (ID1

java中调用数据库中的存储过程和函数

public static void main(String[] args) {         Connection conn =getConnection(url,user, pwd);         System.out.println("数据连接成功");         CallableStatement cs=null;         try         {    //调用数据库中的存储过程              cs = conn.prepareCall(&q

C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CREATE PROCEDURE sp_AccountRole_Create @CategoryID int, @RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int -- 查