Bagaimanakah mybatis memanggil prosedur tersimpan mysql dan mendapatkan nilai pulangan

王林
Lepaskan: 2023-05-27 09:01:30
ke hadapan
2023 orang telah melayarinya

Mybatis memanggil prosedur tersimpan mysql dan mendapat nilai pulangan

1 MySQL mencipta prosedur tersimpan

#结束符号默认;, delimiter $$语句表示结束符号变更为$$
delimiter $$
CREATE PROCEDURE `demo`(IN inStr VARCHAR(100), out ourStr VARCHAR(4000))
BEGIN

SET ourStr = '01';
if (inStr == '02') then
    set ourStr = '02';
end if;

END$$
#结束符号修改
delimiter ;
Salin selepas log masuk

2 🎜>
// key1和key2都是参数map中的key
// key1是需要传入存储过程的值
// key2是用于接收存储过程返回的值,跟获取自增主键类似
@Select("call demo('${key1}', #{key2, mode=OUT, jdbcType=VARCHAR})")
@Options(statementType = StatementType.CALLABLE)
String getDemoValue(Map<String, Object> map);
Salin selepas log masuk

(2) kaedah xml

 <select id="getDemoValue" resultType="java.lang.String" parameterType="java.util.Map" statementType="CALLABLE">
     call demo(&#39;${key1}&#39;, #{key2, mode=OUT, jdbcType=VARCHAR})
 </select>
Salin selepas log masuk

mybatis menghadapi perangkap untuk mengembalikan nilai nol apabila memanggil prosedur tersimpan

mybatis mengembalikan nilai nol apabila memanggil prosedur tersimpan

Prosedur yang disimpan

BEGIN
   #SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;
   SELECT user_name userName FROM test_user t WHERE t.user_sex=sex;
END
Salin selepas log masuk
Salin selepas log masuk

kemudian dalam fail konfigurasi Mybatis Mapper

 <!--存储过程  输入参数用Map -->
  <select id="queryCountBySexWithProcedure" statementType="CALLABLE" parameterType="java.util.Map" resultType="java.util.HashMap">
      {
           CALL queryCountBySexWithProcedure(
              #{sex,jdbcType=VARCHAR,mode=IN},
              #{userName,jdbcType=VARCHAR,mode=OUT}
           )
    }
  </select>
Salin selepas log masuk

maka nilai UserName adalah batal. Pemetaan dilakukan dalam fail mapper.xml, dan nama_pengguna atribut yang ditandakan dengan warna merah di bawah dalam prosedur tersimpan tidak dipetakan secara automatik kepada nilai Nama pengguna, jadi panggilan ke nilai Nama pengguna mesti mengembalikan nol.

BEGIN
   #SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;
   SELECT user_name userName FROM test_user t WHERE t.user_sex=sex;
END
Salin selepas log masuk
Salin selepas log masuk

Jadi bagaimana untuk menangani masalah ini? Iaitu untuk menambah kata kunci INTO

BEGIN
    #SELECT COUNT(*) scount FROM test_user t WHERE t.user_sex=sex;
         SELECT user_name INTO userName FROM test_user t WHERE t.user_sex=sex;
END
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah mybatis memanggil prosedur tersimpan mysql dan mendapatkan nilai pulangan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan