反转基因福娃 发表于 2024-11-2 15:05:57

数据库存储过程的后端调用(SQLServer)

项目中使用到了SQL Server的存储过程,其位于可编程性-存储过程,详细如下。
https://i-blog.csdnimg.cn/direct/5a37b79ef6cd4f79b7852b6894c5846b.png#pic_center
其内需要四个入参,为表名,列名,左固定值,剩下右边的长度。
本项目中需要天生10位验收单编号,其中前六位为年+月,后四位为表中没有的最小码。则入参:Sell_ysqk(表名),ysdbh(列名),year+month:如202410(左固定值),4(右剩余长度)。
在后端Mybatis中使用存储过程,此中用一种常用的HashMap的方式:
Mapper.xml中通过 call 存储过程名 调用。
{call getMinSerial_withLeft(#{tableName}, #{columnName}, #{left}, #{rightLength})}
入参为HashMap,出参为String。(入参不知道是什么每每写map就行)
<select id="getYsdbh" parameterType="java.util.HashMap" statementType="CALLABLE" resultType="String">
    {call getMinSerial_withLeft(#{tableName}, #{columnName}, #{left}, {rightLength})}
</select>
在serviceImpl中,如下传参并接收返回值即可。
HashMap<String,Object> map=new HashMap<>();
map.put("tableName","Sell_ysqk");
map.put("columnName","ysdbh");
map.put("left",year+""+month);
map.put("rightLength",4); //Map中据入参名放好相应参数。
String ysdbh = mapper.getYsdbh(map);//将map传入方法,定义一个String来直接接收。
假如是有出参的,或者参数类型差别。xml中需要以mode,javatype注明。
{ call pro_yjjs_xmxx
(#{nd, mode=IN, jdbcType=VARCHAR}, #{jd, mode=IN, jdbcType=VARCHAR}, #{htjzrq, mode=IN, jdbcType=VARCHAR}, #{kssj, mode=IN, jdbcType=VARCHAR}, #{jssj, mode=IN, jdbcType=VARCHAR}, #{zxjg, mode=OUT, jdbcType=VARCHAR}) }
在ServiceImpl中,put后要先调用完存储过程,出参已存储至map中,此时再get出参即可获取。
      paramsMap.put("nd", nd);
      paramsMap.put("jd", jd);
      paramsMap.put("htjzrq", htjzrq);
      paramsMap.put("kssj", ksJsDate.get("kssj"));
      paramsMap.put("jssj", ksJsDate.get("jssj"));
yjjsMapper.clearUpTempXmyjjs(paramsMap);
String zxjg=paramsMap.get("zxjg")

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库存储过程的后端调用(SQLServer)