oracle spring 分頁查詢,SpringJDBC 調用oracle 通用存儲過程分頁

我博客前面有寫道SpringJDBC調用通用的Oracle存儲過程,今天來講一下通用的Java存儲過程帶分頁的功能,其中里面還有動態查詢的SQL拼接,好的,先上代碼

1.Java代碼

@Autowired

private JdbcTemplate jdbcTemplate;

/**分頁查詢

* @return

*/

@ResponseBody

@RequestMapping(value = "/findPageList", method = {RequestMethod.GET, RequestMethod.POST}, produces = "application/json;charset=utf-8")

public IResult findPageList(@RequestBody String param){

HashMap hashMap = JSON.parseObject(param, HashMap.class);

String name=(String) hashMap.get("name");

ListreqList=null;

if( hashMap.get("reqList") != null){

reqList=(List) hashMap.get("reqList");

}

ListresList=(List) hashMap.get("resList");

Mapmap=this.callPageProcedure(name,reqList,resList);

List rlist= (List)map.get("data");

int rtotal= (Integer)map.get("total");

return new PageResultBean>(rlist,rtotal);

}

/***

* 分頁的存儲過程

* * 獲取數據庫內的存儲過程--返回一個Map,封裝有list集合和總記錄數

* @param procedureName 存儲過程名

* @param inParameter 輸入的參數page,limit 至少有2個

* @param outParamter 輸出的參數

* @return

*/

private MapcallPageProcedure(final String procedureName,final List inParameter,final List outParamter){

if(procedureName==null || procedureName.length() == 0 ){

return null;

}

//輸入參數的校驗

if(inParameter ==null ){

throw new BizException("輸出參數為空!");

}

//輸入參數的校驗

if(inParameter.size()<2 ){

throw new BizException("輸出參數的個數錯誤!");

}

//輸出參數的校驗,沒有返回參數則拋出異常

if(outParamter == null || outParamter.size() == 0){

throw new BizException("輸出參數為空!");

}

Mapr = (Map) jdbcTemplate.execute(

new CallableStatementCreator() {

public CallableStatement createCallableStatement(Connection con) throws SQLException {

int inSize = inParameter==null?0:inParameter.size();

//int outSize = outParamter==null?0:outParamter.size();

StringBuffer sbsql = new StringBuffer();

sbsql.append("{call "+procedureName).append("(");

//注意這里面返回的是游標,加1即可

for(int i=0;i 0 ){

String typeName = null;

for(int i=0;i>() {

public MapdoInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {

int inSize = inParameter==null?0:inParameter.size();

MapresMap=new HashMap<>();

Listlist = new ArrayList();

cs.execute();

ResultSet rs = (ResultSet) cs.getObject(inSize+1);// 獲取游標一行的值

int count=(int)cs.getObject(inSize);//取條數

while (rs.next()) {// 轉換每行的返回值到Map中

Map rowMap = new HashMap();

for(int i=0;i

2.Oracle數據庫代碼

--程序包頭

create or replace package P_findAreaPage_pak

is

type outData is ref cursor;

procedure P_findAreaPage(p_pagesize int,

p_startsize int,

jgdm varchar2,

ywlx varchar2,

jgmc varchar2,

xzqhname varchar2,

sDate varchar2,

eDate varchar2,

out_pagecount out int,--輸出參數,調用的時候隨便填寫一個整數值,詳情---請看postman傳參

out_datacollection out outData);

end P_findAreaPage_pak;

--程序包體

create or replace package body P_findAreaPage_pak

is

procedure P_findAreaPage(p_pagesize int,

p_startsize int,

jgdm varchar2,

ywlx varchar2,

jgmc varchar2,

xzqhname varchar2,

sDate varchar2,

eDate varchar2,

out_pagecount out int,--輸出參數,調用的時候隨便填寫一個整數值

--請看postman傳參

out_datacollection out outData)

as

v_sql varchar2(3000);

v_count int;

v_upCount int;

v_lowCount int;

v_where varchar2(3000):='where 1=1';

begin

--拼接查詢條件

IF jgdm IS NOT NULL or jgdm <> ' ' THEN

v_where := v_where||' and t0.jgdm= '''||jgdm||'''';

END IF;

IF ywlx IS NOT NULL or ywlx <> ' ' THEN

v_where := v_where||' and t0.ywlx = '''||ywlx||'''';

END IF;

IF jgmc IS NOT NULL or jgmc <> ' ' THEN

v_where := v_where||' and t0.jgmc like ''%'||jgmc||'%''';

END IF;

IF xzqhname IS NOT NULL or xzqhname <> ' ' THEN

v_where := v_where||' and t0.xzqhname like ''%'||xzqhname||'%''';

END IF;

IF sDate IS NOT NULL or sDate <> ' ' THEN

v_where := v_where|| ' and t0.bzrq >= to_date('''||sDate||''',''yyyy-mm-dd'')';

END IF;

IF eDate IS NOT NULL or eDate <> ' ' THEN

v_where := v_where|| ' and t0.bzrq <= to_date('''||eDate||''',''yyyy-mm-dd'')';

DBMS_OUTPUT.put_line(v_where);

END IF;

--獲取頁面總的記錄數

execute immediate ' select count(1)

from AA t0 inner JOIN BB t1 on T0.BZJGDM =T1.BZJGCODE ' || v_where into v_count;

out_pagecount:=v_count;

--獲取數據的上下限

v_upCount:=p_startsize*p_pagesize; --上限

v_lowCount:=v_upCount-p_pagesize+1; --下限

v_sql:='select * from (select a.*,rownum r from (select nvl(substr(T1.BZJGNAME,4),''||其它地方||'') as name,count(1) as sum

from AA t0 inner JOIN BB t1 on T0.BZJGDM =T1.BZJGCODE ' || v_where ||' GROUP BY T1.BZJGNAME ORDER BY count(1) desc ) a where rownum <='||to_char(v_upCount)||') B

where r>='||to_char(v_lowCount);

DBMS_OUTPUT.put_line(v_sql);

open out_datacollection for v_sql;

end p_findAreaPage;

end P_findAreaPage_pak;

注意,我這里用到了兩張表,你們可以自行新建兩張表,將我的替換即可,附上建表語句

3.建表語句,數據你們自行插入

-- Create table

create table AA

(

jjhydmold VARCHAR2(10),

orgid NUMBER(20),

jgdm VARCHAR2(10),

jgmc VARCHAR2(200),

xzqhname VARCHAR2(100),

bzrq DATE,

bzjgdm VARCHAR2(9),

fddbr VARCHAR2(200),

zjlx VARCHAR2(100),

zjhm VARCHAR2(25),

jgdz VARCHAR2(200),

yzbm VARCHAR2(10),

dhhm VARCHAR2(42),

zczj NUMBER(20,8),

zch VARCHAR2(65),

pzjgmc VARCHAR2(160),

jyfw VARCHAR2(2000),

pigetime DATE,

ywlx VARCHAR2(50),

zgrs NUMBER(20),

rn NUMBER

)

-- Create table

create table BB

(

bzjgid NUMBER(10) not null,

bzjgname VARCHAR2(100),

bzjgcode VARCHAR2(100),

bzjgjcname VARCHAR2(50),

centerid NUMBER(10),

centername VARCHAR2(50),

centercode VARCHAR2(50),

address VARCHAR2(150),

tellphone VARCHAR2(50),

leader VARCHAR2(50),

mobilephone VARCHAR2(50),

remark VARCHAR2(500),

coltime DATE

)

4.Postman請求

//請求url(Get或Post請求)

localhost:9090/produce/findPageList

//參數JSON

{"name":"P_findAreaPage_pak.P_findAreaPage",

"reqList":[ "3", "1","","換證","武漢","","","2009-02-02",1222],

"resList":["name","sum"]

}

//返回JSON

{

"code": "0000",

"msg": "success",

"data": [

{

"name": "辦證大廳",

"sum": 158

},

{

"name": "青山區",

"sum": 7

},

{

"name": "洪山區",

"sum": 7

}

],

"count": 202

}

注意reqList最后一個參數是一個輸入輸出參數,我們這里隨便填寫一個整數值即可,我這里填寫的是:1222

最后,附上的Java工具類

//總共4個類

//返回結果

@Data

public class PageResultBeanextends AbstractResult implements Serializable{

private static final long serialVersionUID = 1L;

/**

* 分頁數據,同layui接受的參數名一樣

* */

private T data;

/**

* 記錄總數,同layui接受的參數名一樣

* */

private Integer count;

public PageResultBean() {

super();

}

/**

* 構造函數

* */

public PageResultBean(T data,Integer count) {

super();

this.data = data;

this.count = count;

}

/**

* 構造函數

* */

public PageResultBean(IErrCode e) {

super();

this.msg = e.getDesc();

this.code = e.getCode();

}

public PageResultBean(Throwable e) {

super();

this.msg = e.toString();

this.code = SYSTEM_FAIL;

}

/**

* 構造函數

* */

public PageResultBean(String code,String msg) {

super();

this.msg = msg;

this.code = code;

}

}

//返回結果

@Data

public abstract class AbstractResult implements IResult{

/**成功Code*/

public static final String SUCCESS = "0000";

/**系統失敗Code*/

public static final String SYSTEM_FAIL = "9999";

/**檢查失敗Code*/

public static final String CHECK_FAIL = "9100";

/**業務失敗Code*/

public static final String BIZ_FAIL = "9200";

public static final String HTTP_FILE="5000";

/**錯誤代碼*/

protected String code = SUCCESS;

/**錯誤信息*/

protected String msg = "success";

}

//返回結果

public interface IResult {

}

/**

* 業務異常封裝

* @author leiYao 2017-11-10

* */

@Data

public class BizException extends RuntimeException {

private static final long serialVersionUID = 1L;

private String errorCode;

public BizException() {

}

/**

* 構造函數

* */

public BizException(String code,String message) {

super(message);

this.errorCode = code;

}

/**

* 構造函數

* */

public BizException(IErrCode e) {

super(e.getDesc());

this.errorCode = e.getCode();

}

public BizException(Throwable cause) {

super(cause);

}

public BizException(String message, Throwable cause) {

super(message, cause);

}

public BizException(String message) {

super(message);

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257999.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

寶寶頭三年至關重要,不看悔掉腸子

http://www.nowamagic.net/librarys/eight/posts/1885以下是一個早教工作者分享他關于現代父母早期教育中出現的問題和多數父母的誤區。正如作者問自己的&#xff1a;“在孩子人生最重要的頭三年&#xff0c;我做對了嗎&#xff1f;在我的引導下&#xff0c;她能保持強烈的探索…

2015年底總結

2015-12-06 16:17&#xff0c;今天是周日&#xff0c;不需要加班的&#xff0c;到公司看看書&#xff0c;寫寫代碼的&#xff0c;突然想到又是年底了&#xff01;需要寫點東西來記錄總結一下2015年了 年初的時候&#xff0c;入職現在這家成都游戲公司&#xff0c;到現在差不多也…

python腳本

01.用戶三次登錄鎖定猜年齡游戲02.購物車省縣市三級聯動03.函數、文件操作實現數據增刪改查---low版本04.ATM購物商城05.模擬計算器持續更新中...腳本很low&#xff0c;但我一直在學。。。轉載于:https://blog.51cto.com/lyndon/1947437

oracle 命令日志輸出,ORACLE常用命令日志

第一章&#xff1a;日志管理1.forcing log switchessql> alter system switch logfile;2.forcing checkpointssql> alter system checkpoint;3.adding online redo log groupssql> alter database add logfile [group 4]sql> (/disk3/log4a.rdo,/disk4/log4b.rdo) …

[VMware WorkStation]虛擬機網絡

1、簡介&#xff1a; vmware為我們提供了三種網絡工作模式&#xff0c;它們分別是&#xff1a;Bridged&#xff08;橋接模式&#xff09;、NAT&#xff08;網絡地址轉換模式&#xff09;、Host-Only&#xff08;僅主機模式&#xff09;。在我安裝了vmware workstation player 1…

阿里查出售假店主并索賠140萬,這次是大數據幫的忙

阿里巴巴將平臺上一家曾出售假貨的網店起訴至深圳市龍崗區法院&#xff0c;以“違背平臺不得售假約定、侵犯平臺商譽”為由索賠140萬元人民幣。此案為國內首例電商平臺起訴售假店主案。 阿里巴巴目前已經準備了一份超長起訴清單&#xff0c;計劃以違背合同約定、侵犯商譽為由&a…

oracle 升級前備份,rac(exadata)升級前的備份及LVM快照的恢復

1、熱備所有數據庫熱備腳本&#xff1a;10.1.1.200&#xff0c;/backup/scripts/whole_db_backup.sh2、在每個計算節點執行dbserver_backup.sh腳本Run script "dbserver_backup.sh" in each compute node. The script takes backup of "/boot" (to ROOT f…

我心中的MySQL DBA

原文網址鏈接&#xff1a;http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一個跨平臺的開源關系型數據庫管理系統&#xff0c;目前MySQL被廣泛地應用在Internet上的中小型網站中。由于其體積小、速度快、總體擁有成本低&#xff0c;尤其是開放源碼這一特點&#xff0c…

Visual Studio 2015 前瞻 屬性初始化賦值!

通常我們建立屬性的時候如果帶初始化值的時候我們經常會這樣處理。 class MyClass{private string _name "hello world!";public string Name {get{return _name;}set{_name value;}}} 或者也可以這樣寫 &#xff1a; class MyClass{public string Name { set; get…

火狐中的CSS Grid Inspector新增強大的功能

2019獨角獸企業重金招聘Python工程師標準>>> 上周&#xff0c;我談到了日常的網站瀏覽我用Firefox&#xff0c;但是在切圖網做前端開發的時候我會用Chrome。 隨著每個版本&#xff0c;FF Nightly在開發工具箱中有一些越來越棒的工具&#xff0c;這些更新使Firefox成…

Linux內核態之間進程通信,內核態和用戶態通信(二)--實現

本文主要使用netlink套接字實現中斷環境與用戶態進程通信。系統環境&#xff1a;基于linux 2.6.32.27 和 linux 3.16.36Linux內核態和用戶態進程通信方法的提出和實現用戶上下文環境運行在用戶上下文環境中的代碼是可以阻塞的&#xff0c;這樣&#xff0c;便可以使用消息隊列和…

上下文無關文法

在計算機科學中&#xff0c;若一個形式文法 G (N, Σ, P, S) 的產生式規則都取如下的形式&#xff1a;V -> w&#xff0c;則稱之為上下文無關文法&#xff08;英語&#xff1a;context-free grammar&#xff0c;縮寫為CFG&#xff09;&#xff0c;其中 V∈N &#xff0c;w∈…

centos 安裝mysql時錯誤unknown variable #39;defaults-file=/opt/redmine-2.6.0-2/mysql/my.cnf#39;...

找到my.cnf所在目錄。運行 chmod 664 my.cnf&#xff0c;再啟動mysql成功

p5js可以在linux上運行嗎,在linux上使用python運行phantomjs

我跟隨this link&#xff0c;現在當我輸入phan然后輸入tab(\t)時&#xff0c;它會自動完成幻影JS。在但是&#xff0c;如果我運行phantomJS -v或phantomJS --version&#xff0c;我得到&#xff1a;bash: /usr/local/bin/phantomjs: /lib/ld-linux.so.2: bad ELF interpreter: …

使用Instant Client配置PL/SQL Developer

之前使用PL/SQL Developer都是直接在本機安裝完整版的Oracle Database&#xff0c;一是省事&#xff0c;二是可以在本機做一些demo測試&#xff1b;最近換了臺電腦&#xff0c;感覺Instant Client更簡單一些&#xff0c;分分鐘配好。 先下載Instant Client&#xff0c;注意&…

linux腳本轉換exe,Ps1 To Exe(powershell腳本轉換EXE工具) V3.0.6 官方版

Ps1 To Exe是款將PowerShell腳本轉換為EXE可執行文件的軟件。同時軟件非常小巧&#xff0c;功能實用&#xff0c;軟件還支持各國的語言&#xff0c;有需要的小伙伴們不要錯過了。(點擊圖片查看高清大圖)【軟件特色】1、Ps1 To Exe 支持多種語言2、Ps1 To Exe使用簡單&#xff0…

標C編程筆記day04 預處理、宏定義、條件編譯、makefile、結構體使用

預處理&#xff1a;也就是包括須要的頭文件&#xff0c;用#include<標準頭文件>或#include "自己定義的頭文件"宏定義&#xff0c;如&#xff1a;#define PI 3.1415926查看用宏定義的值替換宏名稱,如&#xff1a;gcc -E test.c帶參數的宏&#xff1a;MAX(x,y) …

java數據結構系列——排列(2):有序陣列

package Array;/*** 對數組排序。當添加到陣列保持有序數組元素&#xff1b;* author wl**/ public class MyOrderArray {private long array[];private int elements;//用于記錄數組中實際數據的個數public MyOrderArray(){arraynew long[50];//數組默認長度為50&#xff1b;}…

NSString 練習

//將“?文藝?青年”改成“213?青年”。 NSString *str "文藝青年"; NSString *str1 [str stringByReplacingOccurrencesOfString:"文藝" withString:"213"]; NSLog("%",str1); //將 整數123 轉換為字符串“123”。 NSString *s …

安全市場五巨頭將面臨新興廠商的挑戰

賽門鐵克、思科、IBM、Check Point、英特爾&#xff0c;警鐘已敲響~ 2016年同比增長率11.5%的數據出臺之后&#xff0c;市場研究公司科技商業研究(TBR)為來年的安全行業繪制了一幅嶄新的藍圖——安全市場上現有的企業將受到新興廠商的挑戰。 展望未來&#xff0c;現有安全市場五…