亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MyBatis 解析具有多個語句的參數

MyBatis 解析具有多個語句的參數

森欄 2023-09-13 18:03:11
我正在嘗試使用 MyBatis 和 PostgreSQL 動態設置查詢的鎖定超時。我的映射器看起來像: @Select("SET LOCAL lock_timeout = '#{lockTimeout}s';"   + "SELECT ......where id= #{myId} FOR UPDATE") MyObject select(@Param("lockTimeout") String lockTimeout, @Param("myId") String id);似乎參數不匹配,我得到了一個 org.postgresql.util.PSQLException: Index of column out of range : 2, number of column 1.@SelectProvider在我的情況下不匹配,因為我的參數鎖定超時不是靜態的。有誰知道如何動態設置參數鎖定超時?
查看完整描述

1 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

pgjdbc 似乎獨立執行每個語句。

我不建議將多個語句放入單個映射器語句中,因為行為取決于驅動程序。

您應該聲明兩個方法并在同一會話/事務中調用它們。


@Update("select set_config('lock_timeout', #{lockTimeout}, true)")

void setLockTimeout(String lockTimeout);


@Select("SELECT ......where id= #{myId} FOR UPDATE")

MyObject select(@Param("myId") String id);

一些注意事項:

  • set_config()被用作似乎SET LOCAL不適用于 a PreparedStatement。

  • @Update用于立即應用更改。如果您使用@Select,您可能需要SqlSession#commit()顯式調用。

  • 與您的示例不同,該參數必須包含sie setLockTimeout("1s")
    如果您只想傳遞一個數字,#{lockTimeout} || 's'應該可以。


查看完整回答
反對 回復 2023-09-13
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號