jdbc,hibernate,mybatis調用存儲過程

建立存儲過程:java

**CREATE  PROCEDURE  productpricing(P_ID IN VARCHAR2,P_COUNT OUT NUMBER)
           BEGIN
            SELECT Count(prod_num)  AS P_COUNT 
            WHERE prod_id =P_ID
           FROM products;
           END;**

============================ jdbc調用:sql

/*
* 括號中的問號和存儲過程參數進行匹配
*/
String sql = "{call productpricing(?,?)}";
// 加載驅動程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 獲取鏈接對象
Connection con = DriverManager.getConnection(url, uid, pwd);
// 獲取執行對象
CallableStatement cs = con.prepareCall(sql);
cs.setString(1, "1a2b");  
// out 註冊的index 和取值時要對應  
cs.registerOutParameter(2, Types.INTEGER);  
// 執行SQL命令
cs.execute();

=============================== hibernate:session

public Integer method(){
           return (Integer) this.getHibernateTemplate().execute(new HibernateCallback(){
               public Object doInHibernate(Session session){
                       Connection conn = session.connection(); 
                        String sql ="{call productpricing(?,?)}"; 
                        CallableStatement cs;
                        Integer result=0;
                       try {
                           cs= conn.prepareCall(sql);
                            cs.setString(1, "1a2b");
                            cs.registerOutParameter(2,Types.INTEGER);
                            boolean rs= cs.execute(); 
                            tttrs=(Integer)cs.getInt(2);
                       } catch (SQLException e) {
                           System.out.println("sql異常:"+e.getMessage());
                       } 
                        return result;
               }
           });      
       }

================== mybatis: 編輯Mapper.xml文件,添加以下的配置項mybatis

<select id="getCount" parameterMap="getCountMap" statementType="CALLABLE">
          CALL mybatis.productpricing(?,?)
  </select>

     <parameterMap type="java.util.Integer" id="getCountMap">
     <parameter property="prod_id" mode="IN" jdbcType="VARCHAR"/>
     <parameter property="pcount" mode="OUT" jdbcType="INTEGER"/>
     </parameterMap>

調用:oracle

SqlSession sqlSession = MyBatisUtil.getSqlSession();
String statement = "me.gacl.mapping.userMapper.getCount";//映射sql的標識字符串
 Map<String, Integer> parameterMap = new HashMap<String, Integer>();
        parameterMap.put("p_id", "1a2b");
        parameterMap.put("pcount", 0);
        sqlSession.selectOne(statement, parameterMap);
        Integer result = parameterMap.get("usercount");
        System.out.println(result);
        sqlSession.close();
相關文章
相關標籤/搜索