报错信息
使用 Wrapper 自定义SQLThere is no getter for property named ‘ew’ in 'class com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘ew’ in ‘class com.baomidou.mybatisplus.core.conditions.query.QueryWrapper’
Mybatis-plus版本:3.0.5
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
错误使用示例
IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);
正确使用示例
IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper ew);
仔细观察,错误示例和正常示例,也就是QueryWrapper 的参数名称不同,所以参数名字必须为ew
,否则就找不到ew这个参数。
示例
1.注解的方式:
@Select("select * from user u left join post p on u.post_id = p.id ${ew.sqlSegment}")
IPage<User> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper ew);
使用注解方式只需添加 ${ew.sqlSegment}
和@Param(Constants.WRAPPER)
即可!
2.xml方式
IPage<User> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper ew);
<select id="selectPosts" resultType="com.example.entity.Post">
select * from user u left join
post p on u.post_id = p.id
<where>
<if test="ew != null ">
${ew.sqlSegment}
</if>
</where>
</select>