java mybatis 执行 sqlserver存储过程 xml 以及实现类

本文介绍如何在SSM框架中使用存储过程处理数据库逻辑。通过定义Mapper接口及XML参数映射,配合Java代码调用存储过程实现数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人觉得用存储过程来写数据库逻辑很方便,因为项目从数据库到后端到前端都要去编写。所以把所有的都分离。

首先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 @ItemMessage=@str
	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

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值