Springboot mybatis-plus ruft das Rückgabewertproblem der gespeicherten Prozedur von sqlserver auf

Frage: Es gibt keinen Rückgabewert, wenn mybatis-plus verwendet wird, um die gespeicherte Prozedur sqlserver aufzurufen

Informationen durchsuchen

Zu beachtende Punkte
Der Grund für die Verwendung von Map zum Übergeben von Parametern liegt darin, dass der Rückgabewert der gespeicherten Prozedur normalerweise in der Parameterdefinition implementiert wird, z. B. In-Eingabeparameter und Out-Ausgabeparameter.

Wenn nach der Ausführung ein Ergebnis zurückgegeben wird, kann das Ergebnis auf diese Weise dem eingehenden Map-Objekt zugeordnet werden.

Der statementType-Wert von Mybatis:
Bildbeschreibung hier einfügen

Holen Sie sich den Rückgabewert
Nach Aufruf der entsprechenden gespeicherten Prozedur sql wird der Rückgabewert wie folgt erhalten:

bigScreenJobMapper.proHbjtFund(map);
String result = map.get("result");

Mybatis verwendet die Annotation @select, um gespeicherte Prozeduren mit Ausgabeparametern aufzurufen

//@Options muss diese Anmerkung verwenden

@Options(statementType = StatementType.CALLABLE)
@Select(“{Call procdure_name(” +
“#{map.name,mode=OUT,jdbcType=INTEGER},” +
“#{map.password,mode=OUT,jdbcType= INTEGER}”, +
“#{map.total,mode=OUT,jdbcType=INTEGER})}”)
void getXXXXX(Map<String,Object> map);

//Map<String, Objekt> aufrufen
map=new HashMap<>();
XXXXMapper.getXXXXX(map);
Map<String, Integer> totalMap = (Map<String, Integer>) map.get(“map”); //Erwerb der Karte
Integer total = totalMap.get("total");//Schlüsselwert ist derselbe wie beim Übergeben von Parametern
Integer name= totalMap.get("name");
Integer password= totalMap.get("password") ;

wichtiger Punkt:

1. @options:statementType.CallAble muss deklariert werden, um dem Programm mitzuteilen, dass die gespeicherte Prozedur ausgeführt werden soll, andernfalls wird gemeldet, dass main nicht gefunden werden kann

2. Es gibt zwei Möglichkeiten, Parameter zu bringen: "$""#"

Der Hauptunterschied ist # mit doppelten Anführungszeichen, $ ohne

Zum Beispiel: #{id} steht für 'id', ${id} steht für id

Der zweite Grund ist, dass @Param("") weggelassen werden kann, weil ein Parameter übergeben wird, aber ${} in diesem Fall nicht verwendet werden kann,

Wenn Sie mehr als zwei Parameter übergeben, müssen Sie @Param("") schreiben

3. Der Ausgabeparameter der gespeicherten Prozedur kann nur über die eingehende Map unter Verwendung von map.XXX abgerufen werden;

Ausgangsparametereinstellung mode=OUT, jdbcType ist konsistent mit dem Typ der gespeicherten Prozedur in SQL.

4. Der Datentyp, der der gespeicherten Prozedur entspricht, ist ein Aufzählungstyp, der groß geschrieben werden muss, z. B. VARCHAR

5. Die von der gespeicherten Prozedur zurückgegebene Ergebnismenge kann direkt von der zurückgegebenen Zuordnung empfangen werden

Hier ein Beispiel:
Anruf

    Map<String,Object> map=new HashMap<>();
        map.put("SID",data.getSid());
        map.put("SType",-1);
        map.put("SFlag",1);
        map.put("SUserAccount",RequestUtils.getUsername());

     baseMapper.Pr_Trans_Approve_PrBar(map);
    if (StringUtils.isEmpty(map.get("result"))) {
    
    
            throw new ErpRuntimeException("存储过程操作异常!");
        }else if(!StringUtils.isEmpty(map.get("result")) && map.get("result").toString().indexOf("NNNN") > -1){
    
    
            throw new ErpRuntimeException("失败:" + map.get("result").toString().replaceAll("N", ""));
     }     

Mapper-Datei

    @Options(statementType = StatementType.CALLABLE)
    @Select("exec [dbo].Pr_Trans_Approve_PrBar "+"#{SID,mode=IN},"+"#{SType,mode=IN},"+"#{SFlag,mode=IN},"+"#{SUserAccount,mode=IN},"+"#{result,mode=OUT,jdbcType=VARCHAR}")
    void Pr_Trans_Approve_PrBar(Map<String,Object> request);

Supongo que te gusta

Origin blog.csdn.net/Drug_/article/details/129800462
Recomendado
Clasificación