<select id="selectMemberByClassIdAndMemberAccount" parameterType="java.lang.Integer" resultType="classOrder"> SELECT * FROM class_order WHERE class_id = #{classId} AND member_account = #{memberAccount} </select>
时间: 2024-03-22 08:40:44 浏览: 56
这也是一个SQL查询语句,用于查询数据库中的class_order表中,class_id和member_account与传入参数相匹配的数据,并返回resultType为classOrder的结果。其中,classId和memberAccount是参数,通过#{paramName}形式进行占位符映射。这个查询语句是一个比较具体的查询,可以根据classId和memberAccount来获取指定的class_order数据。
相关问题
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'adminId' in 'class java.lang.Integer'
### MyBatis ReflectionException 解决方案
当遇到 `ReflectionException` 提示找不到名为 `'adminId'` 的 getter 方法时,通常是因为参数传递方式不当或映射配置存在问题。以下是几种可能的原因及解决方案:
#### 参数类型不匹配
如果方法接收的是基本数据类型(如 `int`, `Integer`),而试图访问其属性,则会抛出此异常。因为基础数据类型的类并没有定义任何额外的属性。
对于这种情况,可以考虑将参数封装到一个对象中再进行传递,而不是直接使用原始类型作为输入参数[^1]。
```java
public class AdminParams {
private Integer adminId;
public Integer getAdminId() { return this.adminId; }
public void setAdminId(Integer adminId) {this.adminId=adminId;}
}
```
接着调整Mapper接口中的签名来接受新的POJO实例:
```java
List<Order> getOrdersByAdmin(AdminParams params);
```
对应的XML语句也需要相应更改, 使用`${}` 或者 `${_parameter.propertyName}` 来获取具体值 :
```xml
<select id="getOrdersByAdmin" parameterType="com.example.AdminParams">
SELECT * FROM orders WHERE admin_id = #{adminId};
</select>
```
#### 单一参数处理
另一种情况是在只有一个参数的情况下,默认情况下MyBatis不会自动将其视为命名参数。此时可以通过添加`@Param` 注解显式指定名称[^5]:
```java
/**
* 获取订单列表按管理员ID过滤.
*
* @param adminId 管理员唯一标识符
*/
List<Order> findOrderByAdmin(@Param("adminId") Integer adminId);
```
相应的SQL片段应参照已声明的名字引用该变量:
```xml
<select id="findOrderByAdmin" resultType="order">
<!-- 注意这里用了之前定义好的名字 -->
SELECT * FROM orders WHERE admin_id=#{adminId};
</select>
```
通过上述任一种办法都可以有效规避由于尝试调用不存在的方法所引发的反射异常问题。
阅读全文