MyBatis调用sqlserver存储过程(table type参数)

本文介绍了如何使用MyBatis在Java中调用SQLServer存储过程,特别是处理table type参数的情况。文章详细阐述了参数说明、表类型的定义、存储过程代码、mapper.xml配置以及自定义typehandler的必要性,旨在解决在不常见场景下Java与SQLServer交互的问题。
摘要由CSDN通过智能技术生成

MyBatis调用sqlserver存储过程(table type参数)

实践过程

java调用sqlserver存储过程的场景实在少之又少,Java多和mysql共同应用,sqlserver也是.net微软系,即使有调用也可通过接口和服务,直接去操作sqlserver存储过程也是被逼无奈 。客户的财务系统是SqlServer的,现在外围开发一个系统需要传递数据,财务系统没有提供对外接口和服务,只能硬着头皮自行实现。
原来有对接过的系统都是直接调用财务系统内的存储过程,里面逻辑还比较复杂,而且又要求性能,故而第一方案还是直接调用存储过程;如果实在走不通,考虑时间要求,那就暂选第二种方案将存储过程逻辑用java代码实现。

参数说明

当然存储过程是有特殊之处,不是普通参数的存储过程,因为需要提交集合数据至存储过程做业务处理,所以在存储过程的参数中用到table type,可以传入一个集合。如何使用java成功调用并返回需要注意细节。

表类型

在 SQL Server 2008 中,用户定义表类型是指用户所定义的表示表结构定义的类型。您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的表变量。有关如何定义表结构的详细信息,请参阅 CREATE TABLE (Transact-SQL)。

若要创建用户定义表类型,请使用 CREATE TYPE 语句。为了确保用户定义表类型的数据满足特定要求,您可以对用户定义表类型创建唯一约束和主键。

存储过程代码

ALTER proc [dbo].[AA_AA_Sp_ZJ_FHD_Insert_Steoak](
@cacc_id varchar(100),--账套ID号
@dDate varchar(100),--订单日期
@cSTCode varchar(100),--销售类型
@cSTName varchar(100),--销售类型名称
@cDeptCode varchar(100),--销售部门
@cPersonCode varchar(100),--业务员
@cCusCode varchar(100),--客户编码
@cCusName varchar(200),--客户名称
@LogBy varchar(100),--制单、审核
@cMemo varchar(200),--备注
@iTaxRate varchar(200),--税率 
@cShipAddress varchar(200),--车号 
@cDefine2 varchar(200),--名称 
@CarNumber varchar(50),--发货单 代销发货单 的cardnumber 01 发货单 05委托代销发货单
@cVouchType varchar(50),--发货单 05
***@invoiceDetails dbo.InvoiceDetailType READONLY,***
@SheetID varchar(50) output,--单号串 
@msg varchar(200) output 
)

table type 定义

CREATE TYPE [dbo].[InvoiceDetailType] AS TABLE(
	[cWhCode] [nvarchar](200) NOT NULL,
	[cInvCode] [nvarchar](200) NOT NULL,
	[cInvName] [nvarchar](200) NOT NULL,
	[iQuantity] [float] NULL,
	[cBatch] [nvarchar](200) NULL,
	[bBatchProperty1] [float] NULL,
	[bBatchProperty2] [float] NULL,
	[bBatchProperty3] [float]
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值