不管我們在做數據庫作業或者任務還是當時的僅靠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: 鍵值不變。
原文地址:https://blog.csdn.net/u010159380/article/details/82255461