mybatis調用存儲過程


輸入一個園的半徑返回園的周長和面積

首先創建存儲過程

create or replace procedure pro_text(s out varchar2,r in out varchar2)
is
v_pi number(10):=3.14;
begin
  s:=v_pi*r*r;
  r:=2*v_pi*r;
end;

創建測試接口

package com.aaa.mybatis.dao;

import java.util.Map;

public interface TextDao {
    public void returnSorC(Map map);
}

創建mapper文件並調用存儲過程

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mybatis.dao.TextDao">
<select id="returnSorC" statementType="CALLABLE">
<!--調用存儲過程有專門的標簽statementType="CALLABLE" 用{}括起來-->
{
call pro_text(
<!--#{第一個是參數名,第二個mode代表出參還是入參或者出入參必須大寫,
jdbcType參數類型jdvcType里沒NUMBER,有VARCHAR ctrl+n輸入jdbcType可以看jdbcType都有哪些類型}-->
#{s,mode=OUT,jdbcType=INTEGER},
#{r,mode=INOUT,jdbcType=INTEGER}
)
}
</select>
</mapper>

創建工具類

package com.aaa.mybatis.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class SqlSessionFactoryUtil {
    private static SqlSessionFactory sessionFactory;
    static {
        Reader reader =null;
        try {
            reader= Resources.getResourceAsReader("mybatis.xml");
            sessionFactory =new SqlSessionFactoryBuilder().build(reader,"myOracle");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public  static SqlSession getSession(){
        return  sessionFactory.openSession();
    }
}

創建mybatis主配置文件

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings>
     <!--打印日志可以看執行的sql語句--> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <environments default="myOracle"> <environment id="myOracle"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property> <property name="username" value="scott"></property> <property name="password" value="tiger"></property> </dataSource> </environment> </environments> <mappers> <mapper resource="com/aaa/mybatis/dao/TextDaoMapper.xml"></mapper><!--指向mapper文件的路徑--> </mappers> </configuration>

創建測試類

package com.aaa.mybatis.text;

import com.aaa.mybatis.dao.TextDao;
import com.aaa.mybatis.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Text {
    public static void main(String[] args) {
        //輸入一個園的半徑返回這個圓的周長和面積 這里我們通過傳Map的方式,穿過去兩個key,一個值,因為存儲過程
     //有一個出參和一個出入參。
SqlSession session= SqlSessionFactoryUtil.getSession(); TextDao mapper = session.getMapper(TextDao.class); Map map=new HashMap(); map.put("r",5); map.put("s",null); mapper.returnSorC(map); System.out.println("這個圓的周長是:"+map.get("r")+"面積是:"+map.get("s")); session.close(); } }

測試結果

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 701141022.
Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@29ca901e]
==>  Preparing: { call pro_text( ?, ? ) } ---執行的sql
==> Parameters: 5(Integer)
這個圓的周長是:30面積是:75  ---執行的結果
Resetting autocommit to true on JDBC Connection [oracle.jdbc.driver.T4CConnection@29ca901e]
Closing JDBC Connection [oracle.jdbc.driver.T4CConnection@29ca901e]
Returned connection 701141022 to pool.

Process finished with exit code 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM