中list得來的原因 沒看到官方說明" type="hidden"/>

談一下思考,關於mybatis中 中list得來的原因 沒看到官方說明


<foreach> 是在sql語句中進行多個id查詢 時用到的,因為mybatis代替jdbc和hibernate, 使用 在xml文件中編寫sql語句,這是一個標簽文件.然后在 dao層?,用sqlSession.來調用這個寫好的sql語句.

有時候我想會不會jdbc更簡單一些??

然后,在xml中寫sql語句,會碰到根據條件或者模糊查詢,這個時候需要接收來自dao層的 查詢條件參數.此時需要在xml文件中的sql語句中接收,並且應該沒有接收,只是確定有幾個占位符,等到預編譯之后,再在dao層中為占位符傳參數值??

不是的,dao層在調用xml中的sql語句的同時就已經傳過去條件參數,只不過只能傳遞一個參數,所以就要用到封裝,所以就會產生collection屬性 是一個單參數,或者一個集合.

內部是不是預編譯 ,不知道.但是反過來jdbc中為什么要預編譯再傳值呢,好處在哪里,然后再看這里是否內部也需要如此???

 

DBAccess dbAccess = new DBAccess();
    SqlSession sqlSession = null;
    try {
        sqlSession = dbAccess.getSqlSession();
        //通過        sqlSession執行sql語句
         sqlSession.delete("Message.deleteBatch",ids);
         //為什么DAO層這樣就可以
         sqlSession.commit();//jdbc是自動提交,但是mybatis中不是自動提交的
         

 

  <delete id="deleteBatch" parameterType="java.util.List">
    DELETE FROM message WHERE id in (
            <foreach collection="list" item="item" separator=",">
            #{item}
            </foreach>
        
    )
  </delete>

 

 

所以此時要用到mybatis中的OGNL語言,也就是 <foreach>語句,接收條件參數放在sql語句中(在xml中)

用在in后的括號里,其實括號都可以不寫,看到過相關的文檔,因為foreach中有開始和結束的屬性,當然有括號簡便.

 

<delete id="deleteOne" parameterType="int">
    DELETE FROM message WHERE id = #{_parameter}
  </delete>
  
  <delete id="deleteBatch" parameterType="java.util.List">
    DELETE FROM message WHERE id in (
            <foreach collection="list" item="item" separator=",">
            #{item}
            </foreach>
        
    )
  </delete>

但是對比只有一個參數的查詢sql語句,可以看到<foreach>的作用只是在xml中實現遍歷.

但是可以看到,傳參數的時候,xml中接收到的參數都是其類型,沒有參數,由於只有一個參數,所以不需要寫參數,就用默認的_parameter或者item 表示傳入的虛參數.完全沒有問題.

最大的原因就是只有一個參數,簡化所有....原來是一種簡化.

#{} 這個是OGNL表達式?,代表傳入的參數,那么為什么要用這個表達式呢,表明它是一個參數變量嗎,便於區分??


免責聲明!

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



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