zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    uni-app快速上手
    uni-app快速上手
    什么是uni-app?
    什么是uni-app?
    美颜小程序准备
    美颜小程序准备
    vue的基本使用
    vue的基本使用
    Web前端开发(高级)下册-目录
    Web前端开发(高级)下册-目录
  • 原文地址:https://www.cnblogs.com/fengxiangyu/p/10889733.html
Copyright © 2011-2022 走看看