【Mybatis】Parameter 'XXX' not found. Available parameters are [1, 0, param1, param2]

    新项目底层选择了更加灵活的Mybatis,之前用的都是自动生成工具,条件查询用的也是生成的Example,因为做统计服务,都是各种查询,也就没有加自动生成的一套。自己写Mapper.xml文件,写了个简单的条件查询接口,就遇到问题了,Parameter ‘XXX’ not found. Available parameters are [1, 0, param1, param2] .

    问题出现的原因是Dao层接口定义和Mapper.xml文件中的参数类型不一致。

    在Xml文件中,我定义的parameterType是查询条件的一个类,代码如下:

namespace="com.uqiauto.statistics.business.company.dao.CompanyMapper">
    "BaseResultMap" type="com.uqiauto.statistics.business.company.entity.Company">
        property="id" column="id" jdbcType="INTEGER" />
        property="compName" column="compName" jdbcType="VARCHAR" />
    
    <select id="queryAllCompany" resultMap="BaseResultMap" parameterType="com.uqiauto.statistics.business.company.entity.CompanyCriteria">
        SELECT
            compID id,
            compName compName
        FROM
            wms_company
        WHERE 1=1
        <if test="keyWord!=null and keyWord!=''">
            and compName like concat(concat("%",#{keyWord}),"%")
        if>
        <if test="platformId!=null and platformId!=''">
            and PLATFORM_ID =#{platformId}
        if>
        <if test="companyType!=null and companyType!=''">
            and COMPANY_TYPE =#{companyType}
        if>
        ORDER BY compID
    select>

     而在Dao层接口定义中,参数定义的是查询条件字段,代码如下:

List queryAllCompany(String keyWord,Long platformId,String companyType);

     两者不一致,就报错了。解决方案

     1)可以将Dao层方法定义的参数都加上个注解@param,代码如下:

List queryAllCompany(@Param("keyWord") String keyWord, @Param("platformId")Long platformId, @Param("companyType")String companyType);

     2)可以将Dao层方法定义的参数改为Xml中定义的查询条件类,在类中定义要进行条件筛选的那几个字段,代码如下:

List<Company> queryAllCompany(CompanyCriteria companyCriteria);
@Data
public class CompanyCriteria extends Criteria {
    private String keyWord;
    private Long platformId;
    private String companyType;
}

    总结:简单的问题,因为之前用的都是自动生成的代码,很少手写,所以很多问题都没有见过,积累的过程。

你可能感兴趣的:(#)