一马平川1

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

日常开发中经常会遇到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=#{?}
posted on 2020-09-26 14:04  一马平川1  阅读(290)  评论(0编辑  收藏  举报