Mapper 介面方法定義多個 `String` 參數:
List<Record> selectByTimeRange(String time1, String time2);
XML 中直接用 `#{time1}`、`#{time2}` 報錯:「找不到該字段/參數」。
MyBatis 不支援直接綁定多個散裝基本類型/String 參數。單參數時自動包裝;多參數時需顯式指定參數名稱或封裝對象。
// Mapper 介面
List<Record> selectByTimeRange(@Param("start") String time1, @Param("end") String time2);
// XML
SELECT * FROM record_table
WHERE reg_date BETWEEN #{start} AND #{end}
// 參數對象
public class TimeRangeParam {
private String startTime;
private String endTime;
// getter/setter
}
// Mapper
List<Record> selectByTimeRange(TimeRangeParam param);
// XML
SELECT * FROM record_table
WHERE reg_date BETWEEN #{startTime} AND #{endTime}
或直接用 `Map
Map params = new HashMap<>();
params.put("start", time1);
params.put("end", time2);
mapper.selectByTimeRange(params);
@Select("SELECT * FROM record_table WHERE reg_date BETWEEN #{start} AND #{end}")
List<Record> selectByTimeRange(@Param("start") String time1, @Param("end") String time2);
@Param,輕量直觀。#{param1}`、`#{param2}` 等預設名稱(MyBatis 3.4+ 預設 `param1`、`param2`...),可讀性差且易出錯。MyBatis 多參數綁定的核心規則:單參數自動包裝,多參數必須顯式命名(@Param)或封裝對象。養成「參數對象化」習慣,能避免 90% 的參數綁定錯誤,並提升代碼可維護性。