ssm框架下使用java代码调用oracle存储过程查询单表返回结果集记录

对于存储过程语法这里不再详细解说,请自行百度。
**

1.创建存储过程mydemo08(返回int类型数据),其中输入参数为ids,输出参数为bmode。

**

create or replace procedure mydemo08(ids in varchar,bmode out int)
as
begin
  select Y_MODE into bmode from REC_BALANCE where BALANCE_ID = ids; --查
  commit;
end;

可以在PL/SQL工具测试以上存储过程语句是否正确执行,复制以下代码在PL/SQL工具执行查看效果。

--执行存储过程
declare
 ids varchar(10);
 bmode int;
begin
  ids:='4';
  mydemo08(ids=>ids,bmode=>bmode);
  dbms_output.put_line('bomde='||bmode);
end;

输出结果为

bomde=10

创建好存储过程后来配置mybatis的映射文件,配置如下

<!-- 调用存储过程 (返回一个整型数据)-->
	<select id="mydemo08" parameterType="pd" resultType="Integer" statementType="CALLABLE">
		{call mydemo08(#{ids,mode=IN,jdbcType=VARCHAR},#{bmode,mode=OUT,jdbcType=INTEGER})}
	</select>

配置好映射文件就可以在service层通过SqlSessionTemplate来调用存储过程了,service代码如下

/**调用存储过程(返回单值)
	 * @param pd
	 * @throws Exception
	 */
	public void select(PageData pd)throws Exception{
		SqlSession session=dao.getsqlsession();
		try {
			
			 dao.findForObject("BalanceMapper.mydemo08", pd);
			 System.out.println(pd.get("bmode"));   //获取返回值
			

      } catch (Exception e) {

           e.printStackTrace();

      }
	}

dao层代码如下

public Object findForObject(String str, Object obj) throws Exception {
		return sqlSessionTemplate.selectOne(str, obj);
	}

最后controller调用service层方法即可。

**

2.创建存储过程mydemo09 (返回实体类对象列表集合类型)

**

create or replace procedure mydemo09(u in varchar,
t out SYS_REFCURSOR
)
is
begin
open t for select * from REC_BALANCE where LOGIN_USER=u;
end;

在PL/SQL工具测试以上存储过程语句是否正确执行,复制以下代码在PL/SQL工具执行查看效果。

--执行存储过程
declare 
t sys_refcursor;
s REC_BALANCE%rowtype;  --变量s与REC_BALANCE表中的各个列类型相同
begin 
mydemo09('a01',t);
loop
fetch 
 t into s;
 dbms_output.put_line(s.LOGIN_USER||' '||s.YE_NUM||' '||s.Y_TIME||' '||s.Y_MODE||' '||s.BALANCE_ID);
 exit when t%notfound; --游标一条一条地遍历记录,当找不到记录时退出
 end loop;
 close t;
end;

输出结果为查询到的记录条数

a01 60 2019-12-20 15:23:43 3 9f521cfae76a44b0b7bd3af80c047ce7
a01 60 2019-12-20 15:23:43 3 9f521cfae76a44b0b7bd3af80c047ce7

创建好存储过程后来配置mybatis的映射文件,配置如下

<!-- 调用存储过程 (返回实体类对象列表集合类型)-->
	<select id="mydemo09" statementType="CALLABLE" parameterType="pd">
    	{call mydemo09(#{u,mode=IN,jdbcType=VARCHAR},#{s,mode=OUT,jdbcType=CURSOR,javaType=ResultSet,resultMap=BalanceResultMap})}
    </select>

    <resultMap type="Balance" id="BalanceResultMap">
		<id column="BALANCE_ID" property="BALANCE_ID"/>
		<result column="LOGIN_USER" property="LOGIN_USER"/>
		<result column="YE_NUM" property="YE_NUM"/>
		<result column="Y_TIME" property="Y_TIME"/>
		<result column="Y_MODE" property="Y_MODE"/>
	</resultMap>
配置好映射文件就可以在service层通过SqlSessionTemplate来调用存储过程了,service代码如下
/** 调用存储过程 (返回实体类对象列表集合类型)
	 * @param pd
	 * @throws Exception
	 */
	public void selectall(PageData pd)throws Exception{
		try {
			
			 dao.findForList("BalanceMapper.mydemo09", pd);
			 ArrayList<Balance> cursorList = (ArrayList<Balance>)pd.get("s");
			 if(cursorList!=null&&cursorList.size()!=0){
					System.out.println("用户名"+"\t"+"余额数量"+"\t"+"获取时间"+"\t"+"获取方式"+"\t"+"ID");
					for (Balance cursor : cursorList) {
						System.out.println(cursor.getLOGIN_USER()+"\t"+cursor.getYE_NUM()+"\t"+cursor.getY_TIME()+"\t"+cursor.getY_MODE()+"\t"+cursor.getBALANCE_ID());
					}
				}

      } catch (Exception e) {

           e.printStackTrace();

      }
	}

dao层代码如下

public Object findForList(String str, Object obj) throws Exception {
		return sqlSessionTemplate.selectList(str, obj);
	}

最后controller调用service层方法即可。控制台输出的结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值