1. 程式人生 > >【MyBatis學習05】傳入引數parameterType

【MyBatis學習05】傳入引數parameterType

在前面的mapper.xml的select、insert、update、delete這些元素中,我們已接觸了傳入引數,並通過parameterType指定傳入引數的型別。注意不要和parameterMap混淆了。(parameterMap幾乎很少場景下用了)

這裡寫圖片描述

MyBatis可以使用的parameterType有基本資料型別和Java複雜資料型別。
複雜資料型別包含Java實體類、Map等。

一、基本資料型別:

包含int,String,Date等。基本資料型別作為傳參,只能傳入一個。通過#{引數名} 即可獲取傳入的值。

<delete id="delete" parameterType="int"
> delete from user where id=#{id} </delete>

java程式碼:

usermapper.delete(1);
session.commit();/*對寫操作進行提交*/

其實這裡的”引數名”可以是任意的。因為JAVA反射只能獲取方法引數的型別,但無從得知方法引數的名字的
上面這個例子把#{id}換成#{di},一樣執行。當然為了便於閱讀程式碼,還是用#{id}。

二、Map型別

在基本型別中,我們只能傳入一個引數。
如果要傳入多個引數怎麼辦?比如要查詢某個價格區間的商品,那麼就需要構建minPrice、maxPrice兩個引數,這時可以用到Map。
通過#{map的KeyName}即可獲取傳入的值。

<select id="searchByPrice" parameterType="Map" resultType="Product">
  <![CDATA[select * from Product where price >= #{minPrice} and price <= #{maxPrice} ]]>
</select>

java呼叫:

SqlSession session = SqlSessionAssist.getSession();

Map<String, Double> pricemap=new HashMap<String,Double>();
pricemap.put("minPrice", 1000.00); pricemap.put("maxPrice", 6000.00); List<Product> tmpuser=session.selectList("twm.mybatisdemo.mapper.ProductMapper.searchByPrice", pricemap); System.out.println(tmpuser.size()); session.close();

引數傳遞時,一定要保證sql語句中的#{minPrice}和map中的key值一樣,大小寫敏感。否則會報引數錯誤。
正是因為這個原因,所以最好是用Java實體作為傳參

三、Java實體型別

通過#{屬性名}即可獲取傳入的值。這跟map很類似。
這裡要說的是內部類的傳參方式 。如果有內部類存在,則用#{內部類物件名.屬性名}獲取傳入值。

class productVo {
    Product pro;

    public Product getProduct() {
        return pro;
    }
    public void setProduct(Product product) {
        this.pro = product;
    }
}
<select id="searchByPrice" parameterType="productVo" resultType="Product">
    <![CDATA[select * from Product where price >= #{pro.minPrice} and price <= #{pro.maxPrice} ]]>
</select>