【问题标题】:How can I map a parameter of entity type with foreach tag of mybatis?如何用mybatis的foreach标签映射实体类型的参数?
【发布时间】: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”。将级别设置为DEBUGTRACE。这是唯一的方法来确定发生了什么。
  • 另外,请确保通用列表具有子类型。而不仅仅是List,也许你应该使用List&lt;Integer&gt;
  • 好建议,非常感谢。

标签: java sql mybatis


【解决方案1】:

参数是List类型吗?试试&lt;select id='car' parameterType="java.util.List"&gt;
还是Car 类型?试试&lt;select id='car' parameterType="your.class.package.Car"&gt;

【讨论】:

  • 第二个。谢谢,我稍后再试试
猜你喜欢
  • 1970-01-01
  • 2013-06-20
  • 2016-07-23
  • 2017-01-20
  • 2018-02-16
  • 1970-01-01
  • 2015-06-19
  • 2020-01-27
  • 1970-01-01
相关资源
最近更新 更多