【发布时间】:2019-07-09 11:07:53
【问题描述】:
实体中有一个名为'carType'的列表类型属性,实体如下:
public class Car{
private List carType;
private String carName;
public void setCarType(List carType){
this.carType = carType;
}
public List getCarType(){
return carType;
}
}
我在调用 DAO 接口之前给它赋值,就像:
Car car = new Car();
car.setCarType = [1,2,3];
List list = Dao.car(Car car);
然后我尝试用mybatis的foreach标签映射参数:
<select id='car'>
select car_name, car_type from tb_car
where car_type in
<foreach item="item" collection="carType" separator="," open="(" close=")" index="">
#{item}
</foreach>
</select>
另外,我希望结果如下:
select car_name, car_type from tb_car
where car_type in (1, 2, 3)
但调试后出现如下错误:
org.mybatis.spring.MyBatisSystemException: nested exception is
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalArgumentException:
invalid comparison: java.util.ArrayList and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison:
java.util.ArrayList and java.lang.String
我知道我可以用 Hashmap 类型的参数来修复它,但是你能告诉我如何用这种方式更正我的代码吗?
【问题讨论】:
-
我将启用 MyBatis 的日志记录以准确查看最终呈现的 SQL。例如,如果您使用 Log4j 并且映射器命名空间是“com.app1.mycarmapper”,您应该启用记录器“com.app1.mycarmapper.car”。将级别设置为
DEBUG或TRACE。这是唯一的方法来确定发生了什么。 -
另外,请确保通用列表具有子类型。而不仅仅是
List,也许你应该使用List<Integer>。 -
好建议,非常感谢。