1. 程式人生 > >SpringMvc呼叫儲存過程,並返回儲存過程返還的資料

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