Mybatis學習日記(三)——使用@param方法傳遞多個參數

在上一篇博客中,我們介紹了單個參數的增刪改查,然而在實際的開發中,經常會遇到多個接口參數的情況。在之前的例子中,我們都是將多個參數合併到一個JavaBean中,但是不可能每次都爲不同的參數創建一個新的JavaBean,所以需要使用其他方式來傳遞多個參數,常見的方法有使用Map類型和使用@param註解。

使用Map類型方法主要是將需要傳遞的參數添加到一個Map集合中,再將Map集合作爲Mybatis的參數傳入,但是這種方法比較繁瑣的地方在於每次需要自己創建一個Map集合並且將需要的參數添加到集合當中。如果感興趣可以去學習一下這種方法,在這裏我們主要使用的是@param註解的方法。


一.添加方法與xml代碼

首先,我們在UserMapper接口中創建一個根據用戶ID和角色的enabled狀態獲取用戶角色信息的方法selectRolesByUserIdAndRoleEnabled,在這個方法聲明時使用@param註解。

/**
* 根據用戶ID和角色的enabled狀態獲取用戶角色
* 
* @param userId
* @param enabled
* @return
*/
List<SysRole> selectRolesByUserIdAndRoleEnabled(
		@Param("userId")Long userId,
		@Param("enabled")Integer enabled
);

在這裏給參數配置@param註解後,Mybatis會自動將參數封裝成Map類型,而@param註解的值會成爲Map中的key,因此在sql中可以通過配置的註解值來使用參數。

接下來在對應的xml文件中添加相應的select語句。

<select id="selectRolesByUserIdAndRoleEnabled" resultType="SysRole">
	select
		r.id,
		r.role_name roleName,
		r.enabled,
		r.create_by createBy,
		r.create_time createTime
	from sys_user u
	inner join sys_user_role ur on u.id = ur.user_id
	inner join sys_role r on ur.role_id = r.id
	where u.id = #{userId} and r.enabled = #{enabled}
</select>

可以看到,經過@param配置後的參數在xml文件的sql中可以直接使用。但是當參數是JavaBean類型時,使用@param註解後就不能直接使用,而是要通過點取值的方式。

/**
* 根據用戶ID和角色的enabled狀態獲取用戶角色
* 
* @param user
* @param role
* @return
*/
List<SysRole> selectRolesByUserIdAndRoleEnabled(
		@Param("user")SysUser user,
		@Param("role")SysRole role
);

通過這樣的方式來傳遞參數時,在sql語句中需要使用#{user.id}和#{role.enabled}從兩個JavaBean中取出指定屬性的值。


二.測試結果

在UserMapperTest類中我們添加selectRoleByUserIdAndRoleEnabled方法的測試方法

@Test
public void testSelectRolesByUserIdAndRoleEnabled(){
	SqlSession sqlSession = getSqlSession();
	try{
		UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
		List<SysRole> userList = usermapper.selectRolesByUserIdAndRoleEnabled(1l, 1);
	} finally{
		sqlSession.close();
	}
}

運行後測試結果如下

selectRoleByUserIdAndRoleEnabled測試結果

上一篇:Mybatis學習日記(二)——單個參數的增刪改查

下一篇:Mybatis學習日記(四)——動態SQL第一部分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章