SpringMvc呼叫儲存過程,並返回儲存過程返還的資料
java後端很多時候都需要和資料庫進行互動,並返回業務資料。一般情況下都會採用執行SQL的方式來進行互動,但有些特別的場景時,也可以直接利用儲存過程返回資料。
儲存過程返回資料的好處是隻需要一個呼叫,即可根據不同的引數返回不同的業務資料,這些業務資料有可能列名完全不一樣。
實現如下:
首先要先定義SqlMap.xml檔案:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <sqlMap namespace="YJSPGJ"> <parameterMap id="yjspgj_test" class="java.util.Map"> <parameter property="v_dxlx" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /> <parameter property="i_qsrq" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /> </parameterMap> <procedure id="yjspgj_test" resultClass="java.util.HashMap" remapResults="true" parameterMap="yjspgj_test"> {call sp_test_returnmap(?,?)} </procedure> </sqlMap>
這裡要重點說明一下:
1、返回的resultClass="java.util.HashMap",一定要是HashMap,如果直接寫Map的話會報錯,因為Map是一個介面,不能對介面進行例項化,HashMap是一個類,可以進行例項化。
2、一定要加上remapResults="true",否則的話當儲存過程返回的列不一致時,會導致系統報錯。
定義基礎類api:
public interface YjspgjService { String KEY="yjspgj.YjspgjService"; public ResultCommon selectTest(Map<String,Object> map); }
定義實現類service:
@Service(YjspgjService.KEY) public class YjspgjServiceImpl extends SubService implements YjspgjService { @Autowired private YjspgjDao yjspgjDao; public ResultCommon selectTest(Map<String, Object> map) { // TODO Auto-generated method stub ResultListData result=new ResultListData(PasCloudCode.SUCCESS); List listData=yjspgjDao.selectTest(map); result.setRows(listData); return result; } }
定義資料庫操作類dao:
@Repository
public class YjspgjDao {
private static final Logger log = LoggerFactory.getLogger(YjspgjDao.class);
@Autowired
private IBaseDAO ibaseDAO;
public List selectTest(Map<String,Object> map){
String sqlKey="yjspgj_test";
return (List)ibaseDAO.selectInfoByPara(sqlKey, map);
}
}
呼叫controller:
@Controller
@RequestMapping("/yjspgj")
public class YjspgjController extends BaseController {
@Autowired
YjspgjService yjspgjService;
private static Gson gson = new GsonBuilder().serializeNulls().create();//用於json格式的轉化
@RequestMapping("/showData")
@ResponseBody
public void showData(HttpServletRequest request, HttpServletResponse response){
Map<String,Object> map=new HashMap();
setMap(map,request);//自行定義Map的值
ResultListData rc= (ResultListData) yjspgjService.selectTest(map);
List list=rc.getRows();
for(int i=0;i<list.size();i++){
try {
response.getWriter().write(list.get(i).toString()+"\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
protected Class setClass() {
// TODO Auto-generated method stub
return this.getClass();
}
}
相關推薦
SpringMvc呼叫儲存過程,並返回儲存過程返還的資料
java後端很多時候都需要和資料庫進行互動,並返回業務資料。一般情況下都會採用執行SQL的方式來進行互動,但有些特別的場景時,也可以直接利用儲存過程返回資料。儲存過程返回資料的好處是隻需要一個呼叫,即可根據不同的引數返回不同的業務資料,這些業務資料有可能列名完全不一樣。實現如
從主Activity中呼叫子Activity,並返回結果給主Activity
使用Intent在Activity間傳遞資料的方法; 1.以Sub-Activity的方式啟動子Activity 呼叫startActivityForResult(Intent,requestCode)函式。 2.設定子Activity的返回值 呼叫setResult()函式設定需要返回給父
VB6下的ado Command呼叫儲存過程,讀取返回值
最近在給老程式(VB6+SQL2005+水晶報表)新增備份、恢復資料庫功能。真心是手動備份資料庫太勞累,且顯得不專業,呵呵。呼叫sp_addumpdevice過程時,發生這SP有返回值,度娘了一圈,很少有提出儲存過程返回值如何在ADO Command中如何引用。 瞎寫的程式
mybatis呼叫儲存過程,獲取返回的遊標
將呼叫儲存過程引數放入map中,由於返回的遊標中包含很多引數,所以再寫一個resultmap與之對應,型別為hashmap。設定返回的jdbcType=CURSOR,resultMap設定為id對應的值。最後遊標中的值就輸出到list中了。程式碼如下: service層
Java 執行資料庫儲存過程,並帶返回值
前提是載入資源DataSource private JdbcTemplate jdbcTemplate; Java 呼叫儲存過程: @Override public String oneUniscInfoHisToDm(final Str
Mysql的儲存過程,Mybatis對儲存過程的呼叫
mysql儲存過
mysql定時執行某一儲存過程,並實現mysql資料庫的定時備份
mysql儲存過程 1、儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。 語法:CREATE PROCEDURE 過程名([[IN|OU
php怎麼將資料寫入指定url的txt中,然後並返回儲存地址提供下載?
/** * 寫入日誌 * @param [type] $data [description] * @param string $url [description] * @return [
android呼叫系統照相機拍照,並壓縮儲存在本地
1.首先拍照和儲存檔案肯定就需要申請許可權 <!-- 往SDCard寫入資料許可權 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_
我查詢一個儲存過程,裡面返回多個記錄集,查詢一個我會,查詢多個數據庫存取要怎麼寫?
DataSet ds =new DataSet(); SqlConnection conn =new SqlConnection(ConnectionString); SqlCommand cmd =new SqlCommand(); cmd.Comm
TCP程式設計例三:從客戶端傳送檔案給伺服器端,伺服器端儲存到本地,並返回“傳送成功”給客戶端。
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.i
在事務中呼叫N個儲存過程,但這些儲存過程都是有寫事務的
SqlTransaction myTrans = sqlconn.BeginTransaction(); SqlCommand sqlcomm =new SqlCommand(); sqlcomm.Transaction = myTrans;
利用Python批量爬取XKCD動漫圖片,並批量儲存
import requests, os, bs4 url = 'https://xkcd.com' os.makedirs('xkcd',exist_ok = True) while not url.endswith('#'): # download the page
利用Opencv儲存圖片,並生成JPG格式,調整壓縮質量。
例如Photoshop軟體儲存JPG影象時有低、中、高和最佳的儲存選項設定,對應生成的影象的大小也不同。用OpenCV生成的影象相對較大,可能類似對應Photoshop最佳的那種儲存的,但是我想要相對小一些的影象,請問如何才能用OpenCV設定JPG影
利用poi把資料儲存excel,並格式化日期例項
下面是一個簡單的小例子,利用poi進行儲存excel操作。 package com.cn; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFR
iOS呼叫相機和相簿 並編輯儲存到本地(個人中心設定頭像)
公司專案需求,需要設定使用者頭像,沒必要用到自定義相機,系統相機完全可以滿足需求,就寫了個小demo測試; 第一步:匯入協議 UINavigationControllerDelegate,UII
C#反射動態呼叫dll中的方法,並返回結果
最近在看工廠開發模式,發現用到了反射,之前只聽說過也沒怎麼用過;所以花了點時間重新溫習了一遍; 反射的作用是動態的載入某個dll(程式集),並執行該程式集中的某個方法,並返回結果;當然也可以給該方法傳遞引數 namespace assembly_name { public class
程式功能:建立一個帶有頭結點的單向連結串列,並將儲存在陣列中的字元依次轉儲到連結串列的各個結點中。
#include <stdio.h> #include <stdlib.h> struct node {int num;struct node *next; }; typedef struct node Node; typedef struct node *Link; void Cr
如何使用plsql匯出oracle資料建表語句,儲存過程,檢視。以及表中資料
轉載自:http://blog.csdn.net/u010735684/article/details/48524727 侵刪 第一:匯出資料建表語句,儲存過程,檢視等 開啟plsql,如圖,點選工具————匯出使用者物件 點選匯出使用者物件。如圖所示: 如圖勾
通過python socket遠程執行命令,並返回值
python socket #!/usr/bin/env python# TCP-Serverimport socketimport subprocesssk_obj = socket.socket(socket.AF_INET,socket.SOCK_STREAM)sk_obj.bind((‘12