爲什麼要使用mybatis的@param

起因

我們先來看一個報錯
在這裏插入圖片描述

報錯很簡單,參數 start 沒找到。
我是在實現一個 API 接口時發現了一個問題,當我不使用 @Param 標籤時,mybatis 是不認識哪個參數叫什麼名字的,儘管我定義了 (long start,long end) 它仍然不認識。在這個接口上,我希望根據前端傳來的參數,查找指定範圍的數據,例如:我想搜索第二頁的數據,假設一頁20個,那麼搜索的範圍就是21-40,於是就會調用接口中的 getTypeListByRange 來查找對應 mapper 的 SQL 語句。

public interface TypeDao {
	Type getTypeByid(long id);
	List<Type> getTypeListAll();
	List<Type> getTypeListByRange(long start,long end);
}

解釋 @Param

org.apache.ibatis.annotations.Param 當映射器方法需要多個參數時,這個註解可以被用於:給映射器方法中的每個參數來取一個名字。否則,多參數將會以它們的順序位置和SQL語句中的表達式進行映射,這是默認的。
語法要求:若使用@Param(“id”),則SQL中參數應該被命名爲:#{id}。

使用

Dao 層

import org.apache.ibatis.annotations.Param;

import com.caeser.upmovie.entity.Type;

public interface TypeDao {
	Type getTypeByid(long id);
	List<Type> getTypeListAll();
	List<Type> getTypeListByRange(@Param("start")long start,@Param("end")long end);
}

Mapper

<select id="getTypeListByRange"   resultType="com.caeser.upmovie.entity.Type">
		SELECT
		ID,
		NAME,
		CREATE_TIME,
		UPDATE_TIME
		FROM
		upm_type
		LIMIT 
		 #{start},#{end};
	</select>

單元測試

public class TypeTest  extends BaseTest{
	@Autowired
	private TypeDao typeDao;
	
	@Test
	public void testDao(){
		List<Type> typeList1=typeDao.getTypeListByRange(1, 4);
		for(int i=0;i<typeList1.size();i++){
			System.out.println(typeList1.get(i).getName());
		}
	}
}

結果
在這裏插入圖片描述

總結

當 Dao 層傳遞參數爲多個參數時,爲了規範,必須使用 @Param 給參數命名。這裏需要注意,使用的是 mybatis 的 param 來命名。

在這裏插入圖片描述

題外話的小字:這幾天在準備軟考,我發現大學裏還真的沒考什麼證書來,最近在看看教師資格證的考試,想試試當老師,然後剛剛又在查看公務員考試,在想去事業單位或者去當公務員,人生的岔路口真的太多了,真擔心自己一不小心就走丟了。

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