您的位置:首页 > 数据库 > Oracle

Oracle中实现分页的存储过程,返回类型为游标,在java中进行接收

2020-07-16 04:24 106 查看

/*
在Oracle中建立存储过程
/
create or replace package page_package as
type p_cursor is ref cursor;end page_package;//创建包
//实现分页
create or replace procedure pro_page(page in number,psize in number,z_page out number,cnum out number,p_cur out page_package.p_cursor)
as
begin
select count()into cnum from userinfo;
z_page:=ceil(cnum/psize);
open p_cur for ‘select * from(select rownum rn,u.* from userinfo u where rownum<=’||pagepsize||’) where rn>’||psize(page-1);
end;

//编写java类
//Mapper接口所实现的
package com.xa.mapper;
import java.util.Map;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.StatementType;

import com.xa.entity.Userinfo;

public interface IUserMapper {
//分页
/*
调取存储过程,“p1”,"p2"表示输入的页数和每页显示的个数
p3,表示输出查询结果的总页数
p4,表示总记录数
p5用游标接收,表示查询的结果集
*/
@Select({“call pro_page(//存储过程名
#{p1,mode=IN,jdbcType=INTEGER},
#{p2,mode=IN,jdbcType=INTEGER},
#{p3,mode=OUT,jdbcType=INTEGER},
#{p4,mode=OUT,jdbcType=INTEGER},
#{p5,mode=OUT,jdbcType=CURSOR,resultMap=result})”})
@Results(id=“result”,value={//查询的结果集,与实体类对应
@Result(id=true,column=“u_id”,property=“u_id”),
@Result(column=“u_name”,property=“u_name”),
@Result(column=“birthday”,property=“birthday”),
@Result(column=“c_id”,property=“c_id”)
})
@ResultType(com.xa.entity.Userinfo.class)//类型为对应的实体类
@Options(statementType=StatementType.CALLABLE)
public void callProc(Map map);
}
//实现类
package com.xa.service;

import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xa.entity.Userinfo;
import com.xa.mapper.IUserMapper;

@Service(“userService”)
public class UserServiceImp {
@Autowired
private IUserMapper userMapper;
public void callPro(Map map) {
// TODO Auto-generated method stub
userMapper.callProc(map);
}
}
//测试类
package com.xa.test;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.mapping.ResultMap;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xa.entity.Userinfo;
import com.xa.service.IUserService;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
BeanFactory bf=new ClassPathXmlApplicationContext(“applicationContext.xml”);
IUserService userService=(IUserService)bf.getBean(“userService”);
Map map=new HashMap();
map.put(“p1”, 1);//表示第一页
map.put(“p2”, 2);//表示每页只显示2条数据
userService.callPro(map);
int z_page=(Integer)map.get(“p3”);
int znum=(Integer)map.get(“p4”);
System.out.println(“总页数为:”+map.get(“p3”)+"\n总记录数为:"+map.get(“p3”));
List list=(List)map.get(“p5”);
for (Userinfo userinfo : list) {
System.out.println(userinfo.getU_name());
}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: