Spring使用MyBatis自动生成器配合PageHelper分页报错


Spring使用MyBatis自动生成器配合PageHelper分页报错:There is no getter for property named ‘__frch_criterion_1’ in ‘class xxx

问题原因:

按条件查询时方法有两个两个参数,原先生成的xxxMapper.xml里找不到对应参数
List selectVOByExample(UserExample example);

解决:

  1. 对以上方法改造:

    // 旧方法
    List<UserVO> selectVOByExample(UserExample example);
    // 新方法
    List<UserVO> selectVOByExampleWithPage(@Param("example") UserExample example);
  2. 在mapper.xml里面新增:

    /* 在此基础上新增 */
    <sql id="Example_Where_Clause" >
        <where >
          <foreach collection="oredCriteria" item="criteria" separator="or" >
            <if test="criteria.valid" >
              <trim prefix="(" suffix=")" prefixOverrides="and" >
                <foreach collection="criteria.criteria" item="criterion" >
                  <choose >
                    <when test="criterion.noValue" >
                      and ${criterion.condition}
                    </when>
                    <when test="criterion.singleValue" >
                      and ${criterion.condition} #{criterion.value}
                    </when>
                    <when test="criterion.betweenValue" >
                      and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                    </when>
                    <when test="criterion.listValue" >
                      and ${criterion.condition}
                      <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
                        #{listItem}
                      </foreach>
                    </when>
                  </choose>
                </foreach>
              </trim>
            </if>
          </foreach>
        </where>
      </sql>
    	
      /* 新增代码 */
      <!--分页接口-->
      <sql id="Example_Where_Clause_Alias" >
        <where >
          <foreach collection="example.oredCriteria" item="criteria" separator="or" >
            <if test="criteria.valid" >
              <trim prefix="(" suffix=")" prefixOverrides="and" >
                <foreach collection="criteria.criteria" item="criterion" >
                  <choose >
                    <when test="criterion.noValue" >
                      and ${criterion.condition}
                    </when>
                    <when test="criterion.singleValue" >
                      and ${criterion.condition} #{criterion.value}
                    </when>
                    <when test="criterion.betweenValue" >
                      and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                    </when>
                    <when test="criterion.listValue" >
                      and ${criterion.condition}
                      <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
                        #{listItem}
                      </foreach>
                    </when>
                  </choose>
                </foreach>
              </trim>
            </if>
          </foreach>
        </where>
      </sql>
  3. 在mapper.xml里面新增:

    // 旧sql
    <select id="selectVOByExample" resultMap="BaseResultMap2" parameterType="com.zwq.ssm.pojo.UserExample" >
        select user.*,role.alias
        from user left join role on user.roleId = role.id
        <if test="_parameter != null" >
          <include refid="Example_Where_Clause" />
        </if>
        <if test="orderByClause != null" >
          order by ${orderByClause}
        </if>
      </select>
    
    // 新sql
      <select id="selectVOByExampleWithPage" resultMap="BaseResultMap2" parameterType="com.zwq.ssm.pojo.UserExample" >
        select user.*,role.alias
        from user left join role on user.roleId = role.id
        <if test="_parameter != null" >
          <include refid="Example_Where_Clause_Alias" />
        </if>
        <if test="example.orderByClause != null" >
          order by ${example.orderByClause}
        </if>
      </select>

  目录