"org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userName' in 'class com.nari.climbing.notice.domain.dto.AddressBookDto'"
时间: 2023-06-28 13:11:25 浏览: 187
这个错误是因为 MyBatis 在映射结果集时无法找到 `AddressBookDto` 类中名为 `userName` 的属性的 getter 方法。你需要检查 `AddressBookDto` 类确保它有一个名为 `getUserName()` 的方法,或者你可以使用 `@Result` 注解来映射结果中的列名到类的属性名,例如:
```java
@Results({
@Result(column = "user_name", property = "userName")
})
public class AddressBookDto {
// ...
}
```
相关问题
org.mybatis.spring.mybatissystemexception: nested exception is org.apache.ibatis.reflection.reflectionexception: there is no getter for property named
这个异常信息是mybatis-spring框架抛出的,意思是在封装查询结果集的时候,无法找到一个名为“propertyName”的属性的getter方法。出现这个异常通常代表着查询结果与映射的实体类属性不匹配,需要检查一下映射文件中的SQL语句和实体类是否正确。
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'oredCriteria' in 'class java.lang.String'
### MyBatis ReflectionException 的解决方案
当遇到 `org.apache.ibatis.reflection.ReflectionException` 异常提示 `'no getter for property named 'oredCriteria' in 'class java.lang.String'` 时,通常是因为 MyBatis 尝试访问一个不存在于指定类中的属性。以下是针对该问题的具体分析和解决方法:
#### 1. 参数类型错误
如果 Mapper 方法的参数是一个简单的 Java 基本数据类型(如 `String`),但在 XML 文件中却试图通过 `${}` 或者 `#{}` 访问其子属性,则会出现此异常。这是因为基本类型的对象并不具备复杂的结构。
**解决办法**:
- **单个参数场景下**, 不需要额外处理即可正常工作[^4]。
- 若需传递复杂条件或多个字段值, 应考虑封装成自定义实体类而非简单字符串形式作为输入参数[^5]。
例如修改接口声明如下:
```java
public List<User> findUsersByCondition(@Param("condition") UserSearchCondition condition);
```
对应XML配置应改为:
```xml
<select id="findUsersByCondition" parameterType="com.example.UserSearchCondition">
SELECT * FROM users WHERE ${_parameter.conditionField} LIKE '%${_parameter.searchKey}%'
</select>
```
这里 `_parameter` 是指代整个传入的对象实例.
#### 2. 使用 @Param 注解显式命名参数
对于多参情况或者即使只有一个参数但为了更清晰表达意图时可以采用这种方式来避免混淆[^1].
示例代码片段展示如何正确应用注解方式解决问题:
```java
// 在Mapper接口上增加@Param标签标明实际变量名称映射关系.
int updateNameById(@Param("id") int userId,@Param("new_name") String newName);
<!-- 配合上述Java端变更调整SQL语句 -->
<update id="updateNameById">
UPDATE table SET column=#{new_name} WHERE id=#{id}
</update>
```
注意此处的关键点在于明确了每个独立项之间的关联性从而防止潜在冲突发生.
#### 3. 调整 SQL 中占位符风格的选择
有时出于业务需求比如实现动态拼接逻辑等功能不得不混合运用`${}`与`#{}`, 此种情形特别需要注意区分两者的适用范围以免引发不必要的麻烦[^3].
一般建议尽可能优先选用预编译模式即`#{}`除非确实必要才改用后者(${})完成特定任务比如说涉及通配符匹配等情况下的灵活操作.
总结来说就是遵循最佳实践减少风险同时提升可维护性和性能表现.
---
### 问题
阅读全文
相关推荐





