这是因为mybatis对parameterType="String的SQL语句做了限制
解决方案1:加入@Param注解
@Mapper
public interface YourMapper {
Integer insert(@Param("username") String username,
@Param("address") String address);
}
@Param注解的使用场景:
1.方法有多个参数,需要@Param注解
@Mapper
public interface objectMapper {
Integer insert(@Param("username") String username,
@Param("password") String password);
}
2.方法参数要取别名,需要 @Param 注解,和xml文件的名称一致
@Mapper
public interface objectMapper {
User objectMapper (@Param("name") String username);
}
//对应mapper
<select id="getUserByUsername" parameterType="org.javaboy.helloboot.bean.User">
select * from user where username=#{name};
</select>
3.XML 中的 SQL 使用了 $ ,那么参数中也需要 @Param 注解
@Mapper
public interface UserMapper {
List<User> getAllUsers(@Param("order_by")String order_by);
}
//对应mapper的xml
<select id="getAllUsers" resultType="org.javaboy.helloboot.bean.User">
select * from user
<if test="order_by!=null and order_by!=''">
order by ${order_by} desc
</if>
</select>
4.那就是动态 SQL ,如果在动态 SQL 中使用了参数作为变量,那么也需要 @Param 注解,即使你只有一个参数。
@Mapper
public interface UserMapper {
List<User> getUserById(@Param("id")Integer id);
}
//对应xml文件
<select id="getUserById" resultType="org.javaboy.helloboot.bean.User">
select * from user
<if test="id!=null">
where id=#{id}
</if>
</select>
其他注意事项:
首先,请确保你的实体类中包含了名为 'orderDate' 的正确属性,并且具有相应的 getter 方法。getter 方法的命名应该遵循 JavaBean 的规范,例如 getOrderDate()
。
如果你已经正确定义了属性和对应的 getter 方法,但仍然出现该错误,那可能是由于 MyBatis Plus 自动填充功能导致的。MyBatis Plus 提供了自动填充功能,它会在插入或更新实体时自动设置被标注的属性的值。
此错误通常是因为配置了自动填充功能,但没有正确设置填充的属性和类型。
你可以检查以下几点:
-
确保实体类中的属性和数据库表中的字段一致,并且有对应的 getter 和 setter 方法。
-
检查是否在实体类的属性上使用了 MyBatis Plus 的注解
@TableField(fill = FieldFill.XXX)
来表示自动填充属性。在这种情况下,确认填充属性的类型与实际类型一致。 -
如果不需要自动填充功能,可以考虑删除相关的注解或禁用自动填充功能。