Mybatis多参数传入实现方式

一、基于注解传参

1、TestMapper接口

/**
 * 根据name和code查询所有数据
 * @param name
 * @param code
 * @return
 */List<Test> selectAll(@Param("name") String name, @Param("code") String code);

2、TestMapper.xml文件

<select id="selectAll" resultType="com.ntan520.test.model.Test">
    select t.* from test
    where name = #{name}
    and name = #{code}
</select>

二、通过Object传参

1、查询条件对象TestQueryDto

@Data
public class TestQueryDto {

    private String name;

    private String code;
}

2、TestMapper接口

/**
 * 根据name和code查询所有数据
 * @param testQueryDto
 * @return
 */List<Test> selectAll(TestQueryDto testQueryDto);

3、TestMapper.xml文件

<select id="selectAll" resultType="com.ntan520.test.model.Test">
    select t.* from test
    where name = #{name}
    and name = #{code}
</select>

Xml文件接收参数时,直接使用对象中的属性名即可,如:#{name}

另外,如果传入的是一个Object且在接口方法使用了@Param注解,则在xml文件的传入参数的地方需要加上前缀,例如:

List<Test> selectAll(@Param("query") TestQueryDto testQueryDto);
<select id="selectAll" resultType="com.ntan520.test.model.Test">
        select t.* from test
        where name = #{query.name}
        and name = #{query.code}
</select>

三、通过Map传参

1、TestMapper接口

/**
 * 根据name和code查询所有数据
 * @param pMap
 * @return
 */List<Test> selectAll(Map pMap);

2、TestMapper.xml文件

<select id="selectAll" resultType="com.ntan520.test.model.Test">
    select t.* from test
    where name = #{name}
    and name = #{code}
</select>

通过Map传参,在xml文件接收参数时使用map中key的名字作为参数名,如#{name}

四、根据下标传参

1、TestMapper接口

/**
 * 根据name和code查询所有数据
 * @param name
 * @param code
 * @return
 */List<Test> selectAll(String name, String code);

2、TestMapper.xml文件

<select id="selectAll" resultType="com.ntan520.test.model.Test">
    select t.* from test
    where name = #{0}
    and name = #{1}
</select>

由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个参数,索引从0开始

另外,使用下标接收参数时,接口方法中的参数不能用Parm注解

发表评论