目录
XML异常问题描述
代码信息
DTO
package example.code.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "ExampleDTO对象", description = "账户信息表")
public class ExampleDTO {
@ApiModelProperty("主键ID")
private String id;
@ApiModelProperty("名称")
private String name;
}
MAPPER
package example.code.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface ExampleMapper extends BaseMapper<Example> {
List<ExampleVo> selectByModel(ExampleDTO dto);
}
XML
<select id="selectByModel" resultType="example.code.TbContractAcctVo">
select
<include refid="Base_Column_List" />
from tb_contract_acct
where is_deleted = '0'
<if test="dto.id != null">
and id = #{dto.id}
</if>
<if test="dto.name != null">
and name= #{dto.name}
</if>
</select>
非空判断不但要判null,还要判空字符串,更正后
<select id="selectByModel" resultType="example.code.TbContractAcctVo">
...(省略)...
<if test="dto.id != null and dto.id!=''">
and id = #{dto.id}
</if>
<if test="dto.name != null and dto.name!=''">
and use_contract_no = #{dto.name}
</if>
</select>
报错信息
[ERROR] org.git.modules.clm.quota.controller.TbContractAcctController - nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'dto' in 'class example.code.TbContractAcctDTO'
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'dto' in 'class org.git.modules.clm.quota.dto.TbContractAcctDTO'
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
at com.sun.proxy.$Proxy158.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
代码检查
属性名大小写正常(又看到因大小问题导致的)
实体类中各对象名与xml中一致,传入参数与xml中使用一致
## 我传入的参数名是 dto ,DTO实体类中,对象名(id,name)与xml使用一致
<if test="dto.id != null">
and id = #{dto.id}
</if>
xml配置正常,各引用正常
解决方法
在mapper方法参数前,添加 @Param 注解,注意注解引入包
package example.code.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface ExampleMapper extends BaseMapper<Example> {
List<ExampleVo> selectByModel(@Param("dto") ExampleDTO dto);
}
在代码没有基础问题的情况下,首要考虑注解问题
不要问我为什么一开始不考虑注解问题,因为我一开始有,我主动给删了,那是个悲伤的故事T_T