1. 程式人生 > >MyBatis傳入引數與ParameterType總結(二)

MyBatis傳入引數與ParameterType總結(二)

mybatis的insert、update、delete、select中都提到了parameterType這個元素。

那麼,這麼愛上鏡的它究竟怎麼使用呢?聽我嘮嘮。

一、介面中的引數型別

    我暫且分為三類:基本資料型別、POJO類、HashMap類

    你也可以把POJO類和HashMap歸為複雜資料型別,均可。

二、接收引數的方式

a、#{引數} 預編譯型別

b、${}  非預編譯(直接引用sql拼接,但是不能防止sql注入)

    基本資料型別只能傳入一個引數,一般使用 #{引數}獲取,複雜資料型別用 #{屬性名},map中則用#{key}獲取;

    ${} 去接收引數,在一個引數情況時,預設必須使用${value}獲取引數值

比如:UserDaoImpl.xml

<update id="updateUser" parameterType="cn.zgg.mybatis.pojo.User">
		UPDATE tb_user 
		SET 
		user_name=#{userName},
		password=#{password},
		name=#{name},
		age=#{age},
		sex=#{sex},
		birthday=#{birthday},
		updated=NOW()
		WHERE
		(id=#{id});
	</update>

java類:

/*
	 * 修改使用者
	 */
	public void updateUser(User user);

測試類:

@Test
	public void testUpdateUser() {
		User user = this.userDao.queryUserById(1l);
		user.setAge(12);
		user.setName("wyll");
		this.userDao.updateUser(user);
	}

總結:介面名與id值一致,引數型別是自定義包裝POJO類,這裡寫的是User類的全路徑。

三、註解

    1)、mapper介面一般只接收一個引數,不過呢,你也可以通過使用@Param註解將多個引數繫結起來,作為一個map輸入引數;

        2)、mapper藉口如何傳遞多個引數呢?

        有兩種方式:

                       a 、預設規則獲取引數:{0,1,param1,param2}

                        b、使用@Param註解指定引數名(最佳方案)

                            這時,對映檔案就可以通過${}或者#{}對應引數名獲取引數

四、返回值型別

    注意了注意了!!!

    ResultMap 是MyBatis中最重要最強大的元素

    為什麼這麼吹?

    因為,它解決了兩大問題:POJO屬性名和表結構欄位名不一致的問題;

                                            完成高階查詢:比如說:一對一、一對多、多對多。

    當然了,駝峰命名法也是可以解決屬性和表結構不對應的問題的,只要在mabatis配置檔案加入

    <setting name="mapUnderscoreToCamelCase"  value="true"/>解決;

    還有sql中使用別名,不過我本人不喜歡,因為懶嘍,嘿嘿。