1. 程式人生 > >mybatis第二篇—引數繫結

mybatis第二篇—引數繫結

不管我們在做資料庫作業或者任務還是當時的僅靠jdbc來寫一個管理系統的時候,sql語句需要一些引數,從而來實現模糊查詢,精確查詢,插入資料,更新資料和刪除資料。這些引數,在mybatis裡面,又該如何使用呢?我總結了一下五點:

  • 單個引數的繫結:

這個和上一篇的用法是一樣的,我們直接在mapper檔案裡面用#{}代替引數,就可以完成單個引數繫結,例如程式碼:

mapper.xml檔案:

<select id="findById" resultType="Teacher">
        select * from teacher where tid=#{tid}
    </select>

在dao層的接口裡面,只需要寫上對應的方法:

public Teacher findById(int tid);

 這樣,直接用sqlsession去讀取這個dao的介面,然後呼叫這個方法,就可以實現單個引數的傳遞了。

  • 多個引數繫結:

如果一個sql語句的查詢條件有多個的話,就需要多個引數的綁定了。

  • 多個引數繫結:索引傳遞

在mapper檔案中:

<select id="findByNameAndCourseWithIndex" resultType="Teacher">
        select * from teacher where tname=#{0} and tcourse=#{1}
    </select>

 在dao層的接口裡面:

public Teacher findByNameAndCourseWithIndex(String tname,String tcourse);

 這樣就實現了根據索引值來傳遞引數的問題。

  • 多個引數繫結:註解繫結

除了索引,我們mybatis還提供了註解的方式來傳遞引數

mapper檔案中:

 <select id='findByNameAndCourseWithBind' resultType="Teacher">
        select * from teacher where tname=#{tname} and tcourse=#{tcourse}
    </select>

 dao層的介面:

public Teacher findByNameAndCourseWithBind(@Param("tname")String tname,@Param("tcourse")String tcourse);

可以看到,mapper檔案中的#{}裡面的引數,用@Param()繫結給了dao層的方法,而#{}和@Param()需要一致。這樣就實現了引數通過註解的方式繫結。 

  • 多個引數繫結:map繫結

利用map,來傳遞引數,我們知道map是一個鍵值對形式儲存資訊的集合,所以利用map也可以實現引數的繫結

mapper檔案程式碼:

<select id="findByNameAndCourseWithMap" resultType="Teacher">
        select * from teacher where tname=#{tname} and tcourse=#{tcourse}
    </select>

dao層介面檔案程式碼:

public Teacher findByNameAndCourseWithMap(Map paramMap);

 在呼叫介面去使用這個方法的時候,我們需要用到put()方法,來將引數傳遞過去,例如這裡就是paramMap.put("tname","張三")這樣一來,就好理解了,鍵值對的存在,也就形成了一個實參和形參的繫結。

  • 多個引數繫結:直接傳遞

和單個引數傳遞一樣,我們可以使用直接傳遞的方法去傳遞多個引數

mapper檔案:

<select id="findByNameAndCourseWithObject" resultType="Teacher" >
        select * from teacher where tname=#{tname} and tcourse=#{tcourse}
    </select>

 dao層介面:

這樣一來,我們就也能實現一種引數的傳遞。

不過要注意的是,mybatis中的SQL接受的引數有基本的資料型別,物件,List,陣列和Map,無論傳遞那種引數給mybatis,都會將引數放在一個Map中,如果傳入基本型別:變數名作為key,變數值作為value 此時生成的map只有一個元素。如果傳入物件: 物件的屬性名作為key,屬性值作為value,如果傳入List: "list"作為key,這個List是value (這類引數可以迭代,利用標籤實現迴圈)如果傳入陣列: "array"作為key,陣列作為value(同上)如果傳入Map: 鍵值不變。