每日一記-mybatis碰到的疑惑:String類型可以傳入多個參數嗎


碰到一個覺得很疑惑的問題,Mybatis的parameterType為String類型的時候,能夠接收多個參數的嗎?

背景

初學Mybatis的時候,看的教程和書籍上都是在說基本的數據類型如:int、String等作為parameterType只能傳入單個值,要想傳入多個值,可以使用List、Map或者自定義的數據類型等等,但是今日看到了一份別人的代碼上,parameterType為String,但是卻用來接收了倆個傳入值,而且查詢的結果並沒有出錯,很是疑惑。

實驗

在網上搜了很久,都沒有搜到跟這個相關的問題,關於傳入多個參數都是使用的Lst、Map或者Bean來進行的,所以為了驗證一下自己寫了個小程序,用log4j在控制台打印出SQL語句查看一下結果。

部分主要代碼如下:

實體類Notice的屬性
private int id;
private String content;
private String createTime;
構造方法、getter/setter
*************************************************************
NoticeMapper.xml一個方法
<!-- 更新公告 -->
<update id="updateNotice" parameterType="String">
    update Notice
    <set>
        <if test="content!=null">
            content = #{content},
        </if>
        <if test="createTime!=null">
            createTime = #{createTime}
        </if>
    </set>
    where ID = #{id}
</update>
*************************************************************
BaseDao中update方法
public int update(String sqlId, Object object) {
    return getSqlSession().update(sqlId, object);
}
*************************************************************
NoticeServiceImpl中相關方法
private Map<String,Object> params;
params.put("ID", 3);
params.put("content", "1213");
getBaseDao().update("updateNotice", params);

以上代碼運行之后,在控制台輸出的sql語句為:

08-11 20:13:12.699 [DubboServerHandler-192.168.51.1:8075-thread-5] DEBUG - ==>  Preparing: update Notice SET content = ? where ID = ? 
08-11 20:13:12.699 [DubboServerHandler-192.168.51.1:8075-thread-5] DEBUG - ==> Parameters: 1213(String), 3(String)
08-11 20:13:12.701 [DubboServerHandler-192.168.51.1:8075-thread-5] DEBUG - <==    Updates: 1

可以看到Mybatis的動態SQL語句執行成功了,返回了Updates: 1,拼裝的sql語句:

update Notice SET content = ? where ID = ?  
1213(String), 3(String)

實驗結果

實驗之后更加迷惑了:

  1. 因為parameterType的值為String,但是我傳遞了一個有倆個值(ID,content)的Map<String,Object>類型竟然傳遞進去了,而且傳遞的值都被正確的接收了,語句也執行成功了。
  2. 更值得注意的是控制台輸出的ID值: 3(String) ,我傳遞ID竟然從INT類型自動轉換成了String類型,這種機制很令人不解。

備注下

這種問題去請教下大神去,然后去翻翻源碼看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM