也许我缺少明显的东西,但是我无法获得成功执行的简单映射插入语句。

使用以下界面

public interface CustomItemMapper
{
    Integer insert(CustomItem item, @Param("extra") String someparam);
}


和以下XML映射

  <insert id="insert" useGeneratedKeys="false" parameterType="map" keyProperty="id">
    insert into CustomItem (id, column2, column3, column4, column5, column6)
        values (#{id}, #{field2}, #{field3}, #{field4}, #{field5}, #{extra})
  </insert>


和这段代码

SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) servletContext.getAttribute("SqlSessionFactory");
SqlSession session = sqlSessionFactory.openSession();
try
{
    CustomItemMapper mapper = session.getMapper(CustomItemMapper.class);
    mapper.update(item);
    session.commit();
}
finally
{
    session.close();
}


我得到以下调试输出:

Checked out connection 368716606 from pool.
ooo Connection Opened
==>  Executing: insert into CustomItem (id, column2, column3, column4, column5, column6) values (?, ?, ?, ?, ?, ?)
==> Parameters: null, null, null, null, null, actual_value_of_extra(String)
xxx Connection Closed
Returned connection 368716606 to pool.


后跟SQL异常(不能在id列中输入null)。

因此,正确传递的唯一值是额外提供的字符串。我已经验证了字段名称正确,并且此时的object不为null且字段已正确填充。

我也尝试使用parameterType="CustomItem"代替parameterType="map",但是结果没有改变。

如果有人能让我知道我在这里想念的东西,我将不胜感激。

提前致谢。

PS:我也遇到与插入语句相同的问题。

最佳答案

您需要在映射器方法中指定另一个参数的名称。我假设CustomItem是Java bean,具有用于field1等的get方法。如上所述,更改您的参数类型,使其不是Map。

从mybatis documentation


  您可以将多个参数传递给映射器方法。如果这样做,他们
  默认情况下,将通过它们在参数列表中的位置命名
  例如:#{1},#{2}等。如果您想更改
  参数(仅限多个),则可以使用@Param(“ paramName”)
  参数上的注释。


因此,更改您的Mapper,

public interface CustomItemMapper
{
    Integer insert(@Param("item")CustomItem item, @Param("extra") String someparam);
}


并将您的xml更改为

 <insert id="insert" useGeneratedKeys="false" parameterType="map" keyProperty="id">
    insert into CustomItem (id, column2, column3, column4, column5, column6)
        values (#{id}, #{item.field1}, #{item.field2}, #{item.field3}, #{item.field4}, #{extra})
  </insert>

关于java - Mybatis 3.0.5具有多个输入的插入/更新语句映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7667461/

10-08 22:30