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
发表于
2019-05-19 16:35
一天两天、
阅读(10998)
评论(0)
编辑
收藏
举报