日常开发中经常会遇到DAO层接口的方法具有多个参数, 如下:
public interface IUserDao {
Employee getById(String id, String name);
}
在xml中statement中取用的方式有多种:
第一种:
id对应arg0, name对应arg1
public interface IUserDao {
Employee getById(String id, String name);
}
------------------------------
<select id="getById" resultType="com.xuejian.mybatis.vo.Employee">
SELECT
T.ID id,
T.NAME "base.pri.name",
T.AGE "base.pri.age",
T.PRIMARY_SCHOOL "base.edu.ps",
T.MIDDLE_SCHOOL "base.edu.ms",
T.COUNTRY_NAME "addr.cou.cName",
T.COUNTRY_LANGUAGE "addr.cou.cLang",
T.PROVINCE_NAME "addr.pro.pName",
T.PROVINCE_CULTURE "addr.pro.pCulture"
FROM SCOTT.EMPLOYEE_T T
WHERE T.ID=#{arg0} and T.NAME=#{arg1}
</select>
第二种:
id对应param1, name对应param2
public interface IUserDao {
Employee getById(String id, String name);
}
------------------------------
<select id="getById" resultType="com.xuejian.mybatis.vo.Employee">
SELECT
T.ID id,
T.NAME "base.pri.name",
T.AGE "base.pri.age",
T.PRIMARY_SCHOOL "base.edu.ps",
T.MIDDLE_SCHOOL "base.edu.ms",
T.COUNTRY_NAME "addr.cou.cName",
T.COUNTRY_LANGUAGE "addr.cou.cLang",
T.PROVINCE_NAME "addr.pro.pName",
T.PROVINCE_CULTURE "addr.pro.pCulture"
FROM SCOTT.EMPLOYEE_T T
WHERE T.ID=#{param1} and T.NAME=#{param2}
</select>
第三种:
使用@Param注解,将入参转换为自定义的名称
public interface IUserDao {
Employee getById(@Param("id")String id, @Param("name")String name);
}
------------------------------
<select id="getById" resultType="com.xuejian.mybatis.vo.Employee">
SELECT
T.ID id,
T.NAME "base.pri.name",
T.AGE "base.pri.age",
T.PRIMARY_SCHOOL "base.edu.ps",
T.MIDDLE_SCHOOL "base.edu.ms",
T.COUNTRY_NAME "addr.cou.cName",
T.COUNTRY_LANGUAGE "addr.cou.cLang",
T.PROVINCE_NAME "addr.pro.pName",
T.PROVINCE_CULTURE "addr.pro.pCulture"
FROM SCOTT.EMPLOYEE_T T
WHERE T.ID=#{id} and T.NAME=#{name}
</select>
总结:
1. mybatis对于多参数映射层接口方法中参数的使用提供了三种方式
2. 前两种无需任何转换操作, 如果使用arg类型的,从0开始,从左向右依次取值; 如果使用param类型的, 从1开始, 从左向右依次取值;
3. 后一种需要用@Param注解将对应入参名转为自定义名称, 这种方式多了注解,但将参数转换为能够见名知义的名称, 使用起来也更方便
补充对于单参数的参数使用:
mybatis对于单参数的映射方法使用方式,除了以上三种方法外,还有另一种更灵活的方式,那就是随便输入不是关键字符的任意非空字符,如1,111, xx, 12sdfd, ? "..等都可以,比如:
WHERE T.ID=#{你好}
WHERE T.ID=#{"}
WHERE T.ID=#{?}