表結構:t_employeer(employeer_id, employeer_name, employeer_age, employeer_department, employeer_worktype)
<resultMap type="Employeer" id="resultMap">
<id property="employeerId" column="employeer_id"/>
<result property="employeerName" column="employeer_name"/>
<result property="employeerAge" column="employeer_age"/>
<result property="employeerDepartment" column="employeer_department"/>
<result property="employeerWorktype" column="employeer_worktype"/>
</resultMap>
<select id="findEmployeerByName" parameterType="string" resultMap="resultMap">
SELECT * FROM t_employeer WHERE employeer_name LIKE #{employeerName}
</select>
List<Employeer> findEmployeerByName(String employeerName);
#{0}, #{1}// Mapper
List<Employeer> findByNameAndDep(String name, String dep);
// XML
<select id="findByNameAndDep" resultMap="resultMap">
SELECT * FROM t_employeer
WHERE employeer_name = #{0} AND employeer_department = #{1}
</select>
缺點:參數順序耦合,可讀性差,易出錯。
@Param 註解(推薦)// Mapper
List<Employeer> findByNameAndDep(@Param("name") String name, @Param("dep") String dep);
// XML
<select id="findByNameAndDep" resultMap="resultMap">
SELECT * FROM t_employeer
WHERE employeer_name = #{name} AND employeer_department = #{dep}
</select>
優點:參數名語意化,順序不敏感,官方推薦做法。
// Mapper
List<Employeer> findByMap(Map<String, String> params);
// XML
<select id="findByMap" parameterType="map" resultMap="resultMap">
SELECT * FROM t_employeer
WHERE employeer_name = #{key1} AND employeer_department = #{key2}
</select>
// 呼叫端
Map<String, String> map = new HashMap<>();
map.put("key1", "明明");
map.put("key2", "財會部");
List<Employeer> list = mapper.findByMap(map);
適用:動態參數數量、通用查詢服務。
// 參數物件
public class EmployeerQuery {
private String name;
private String department;
// Getter/Setter
}
// Mapper
List<Employeer> findByQuery(EmployeerQuery query);
// XML
<select id="findByQuery" parameterType="EmployeerQuery" resultMap="resultMap">
SELECT * FROM t_employeer
WHERE employeer_name = #{name} AND employeer_department = #{department}
</select>
優點:型別安全、IDE 支援重構、文檔化、易擴展。
resultType:簡單查詢,欄位名與屬性名一致時自動映射resultMap:複雜映射(關聯、別名、型別轉換、建構子注入)<select>


| 場景 | 推薦方式 | 理由 |
|---|---|---|
| 固定 1-2 參數 | @Param | 清晰、解耦順序 |
| 動態/可變參數 | Map | 靈活通用 |
| 固定多參數、長期維護 | POJO | 型別安全、可擴展、文檔化 |
| 避免使用 | 索引佔位符 | 脆弱、不可讀 |