輸入一個園的半徑返回園的周長和面積
首先創建存儲過程
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