jdbc,hibernate,mybatis调用存储过程

眉间皱痕 提交于 2019-12-11 16:34:01

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

创建存储过程:

**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调用:

/*
* 括号中的问号和存储过程参数进行匹配
*/
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:

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文件,添加如下的配置项

 <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>

调用:

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();
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!