1. 程式人生 > >java mybatis 執行 sqlserver儲存過程 xml 以及實現類

java mybatis 執行 sqlserver儲存過程 xml 以及實現類

個人覺得用儲存過程來寫資料庫邏輯很方便,因為專案從資料庫到後端到前端都要去編寫。所以把所有的都分離。

首先ssm的結構配置這裡就不說了,可以看我部落格ssm的2種配置。

1、Mapper.java

import java.util.List;
import java.util.Map;

public interface Mapper {
	public List<Map<String,Object>> operaProcedure(Map map);
}

2、mapperSetting.xml

<mapper namespace="daos.Mapper">
	<parameterMap type="map" id="paramsMap">
		<parameter property="action" javaType="String" jdbcType="VARCHAR"
			mode="IN" />
	</parameterMap>
</mapper>

3、test.java

這裡只貼了實現儲存過程的主要程式碼

                SqlSessionFactory sf = (SqlSessionFactory) context.getBean("sqlSessionFactory");
		SqlSession sqlsession = sf.openSession();
		StringBuffer sb = new StringBuffer();
		Mapper mapper = sqlsession.getMapper(Mapper.class);
		Map map = new HashMap();
		sb.append("<main>");
		sb.append("<PROCNAME>sp_videocall</PROCNAME>");
		sb.append("<OPTYPE>delcall</OPTYPE>");	
		sb.append("<USERORDROWID>" + userordrowid + "</USERORDROWID>");
		sb.append("<ROOMID>" + roomid + "</ROOMID>");
		sb.append("</main>");
		map.put("action", sb.toString());
		List<Map<String, Object>> list = mapper.operaProcedure(map);
		Map resultMap = new HashMap();
		sqlsession.commit();
		sqlsession.close();

4、test.sql

CREATE TABLE [dbo].[t_videocall](
	[flag] [int] IDENTITY(1,1) NOT NULL,
	[ordeowid] [varchar](200) NULL,
	[roomid] [varchar](200) NULL,
	[keyid] [varchar](200) NULL,
	[inline] [varchar](50) NULL,
	[waittime] [datetime] NULL,
	[userordrowid] [varchar](200) NULL
) ON [PRIMARY]
GO
CREATE proc [dbo].[sp_videocall] @str  varchar(max)
as
begin
	DECLARE @ItemMessage XML	
	SET @
[email protected]
declare @flag varchar(100) if @ItemMessage.value('(/main/OPTYPE/text())[1]','varchar(max)') ='delcall' begin set @flag = (select top 1 flag from dbo.t_videocall where roomid = @ItemMessage.value('(/main/ROOMID/text())[1]','varchar(max)') and userordrowid = @ItemMessage.value('(/main/USERORDROWID/text())[1]','varchar(max)') order by flag asc) delete dbo.t_videocall where flag = @flag if exists(select * from dbo.t_videocall where flag = @flag) select '以刪除' as result,'0' as error else select '出錯,請聯絡管理員' as result,'1' as error end end

以上

相關推薦

java mybatis 執行 sqlserver儲存過程 xml 以及實現

個人覺得用儲存過程來寫資料庫邏輯很方便,因為專案從資料庫到後端到前端都要去編寫。所以把所有的都分離。首先ssm的結構配置這裡就不說了,可以看我部落格ssm的2種配置。1、Mapper.javaimport java.util.List; import java.util.Ma

mybatis 呼叫sqlserver 儲存過程

<select id="testStoredProcedure" statementType="CALLABLE" resultMap="TestMap"> <![CDATA[ {call AllNewcourse(${shopid},${cours

mybatismybatis呼叫sqlserver儲存過程和表值函式

儲存過程和表值函式的區別 最簡單的區別是儲存過程是pr開頭的,而儲存過程是fn開頭的,表值函式返回的是一個表結構的結果。如果mybatis用呼叫儲存過程的方式去呼叫表值函式,就會丟擲以下的異常: exc

Java執行緒/併發20、Future實現:FutureTask

FutureTask是future的實現類,它同時實現了兩個介面:Runnable和Future,所以它既可以作為Runnable被執行緒執行,又可以作為Future得到Callable的返回值。 因此我們可以: - 呼叫FutureTask物件的ru

Java執行Oracle儲存過程並接收返回值

Java執行Oracle儲存過程並接收多個返回值(集合/數值) Java程式碼: package com.pure.util; import java.sql.Connection; import java.sql.DriverManager; import java.s

"伺服器無法繼續該事務 3400000006"錯誤原因--JAVA呼叫SQLSERVER儲存過程過程發生異常內部事務未提交

    通過JAVA呼叫SQLSERVER儲存過程時,儲存過程內部發生了型別轉換異常,在型別轉換異常發生之前已經將事務打開了,並且在型別轉換那一行沒有采用像如下錯誤處理:     if @@error<>0 then         goto err     e

Java 執行資料庫儲存過程,並帶返回值

前提是載入資源DataSource private JdbcTemplate jdbcTemplate; Java 呼叫儲存過程: @Override public String oneUniscInfoHisToDm(final Str

菜鳥筆記:java呼叫sqlserver儲存過程

首先建立一個儲存過程: CREATE proc HR_PER_TARGET_SCORECHECK @PLANID varchar(20),  @Obj_A0100 varchar(20), @Body

基於C#中的SqlCommand物件呼叫SQLServer儲存過程時,儲存過程執行成功,但是物件方法ExecuteNonQuery()返回-1

問題如題。 【下面是一個例子】 1、儲存過程完成的功能是:插入insert一條記錄,相同主鍵的記錄存在時執行更新update的操作。儲存過程正常執行的返回值是1.(不過本文提到的問題和這個返回值沒關係。) 2、在另一個.cs檔案中使用 SqlCommand物件 呼叫方法Ex

mybatis呼叫oracle儲存過程返回遊標 讀取到java的List

mapper: <select id="testP" statementType="CALLABLE" > {call P_TEST(#{v_cursor, mode=OUT, jdbcType=CURSOR})} </select> ja

sqlserver儲存過程拼接sql語句,執行報錯“列名無效”

今天寫儲存過程,遇到一個問題,具體如下:需求是要統計一張報表,這張表的列不固定,因此在儲存過程裡做插入語句的時候,就用到了sql語句拼接再執行。這裡拼接的insert語句是set @sql= 'insert into ##tn(prj) values('[email 

sqlserver儲存過程/遊標及例項

--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2

SQLSERVER儲存過程的基本語法例項

SQLSERVER儲存過程的基本語法例項 SQLSERVER儲存過程的基本語法例項 一、定義變數--簡單賦值 declare @a intset @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) select @user1='張三'prin

二十三、觸發器:自動執行儲存過程

                        

sqlserver儲存過程實現資料批量刪除--分割字串實現

寫的儲存過程,接收的引數的一個字串,通過分割字串從而實現批量刪除。 IF (@operation = 'delete') BEGIN DECLARE @temp nvarchar(200) DECLARE @splitchar nvarchar(1) SET

Mybatis Oracle 使用儲存過程進行分頁

一、儲存過程 --儲存過程語句 CREATE OR REPLACE PROCEDURE PAGE_UTIL(--儲存過程分頁工具 location IN VARCHAR2,--查詢語句 page IN int,--第幾頁 perP

java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字(已解決)

在java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字 //java程式碼 @Test public void testProcedure(){

儲存過程java呼叫 hana 的儲存過程

一)儲存過程寫法如下: CREATE PROCEDURE "HANA_BI"."com.WFJ.OFFLINE.PROCEDURES::TEST" (P_INT INT, out V_RESULT n

Java執行緒程式設計--使用Lock物件實現同步以及執行緒間通訊

前幾篇: 在《Java多執行緒程式設計-(4)-執行緒間通訊機制的介紹與使用》已經學習了,可以使用方法wait/notify 結合同步關鍵字syn

sqlserver儲存過程

儲存過程 Transact-SQL中的儲存過程,非常類似於Java語言中的方法,它可以重複呼叫。當儲存過程執行一次後,可以將語句快取中,這樣下次執行的時候直接使用快取中的語句。這樣就可以提高儲存過程的效能。 儲存過程的概念 儲存過程Procedure是一組為了完