alo*_*oko 1 java mapping persistence mybatis
也许我遗漏了一些明显的东西,但我无法获得一个简单的映射插入语句成功执行.
使用以下界面
public interface CustomItemMapper
{
Integer insert(CustomItem item, @Param("extra") String someparam);
}
Run Code Online (Sandbox Code Playgroud)
以及以下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>
Run Code Online (Sandbox Code Playgroud)
和这段代码
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();
}
Run Code Online (Sandbox Code Playgroud)
我得到以下调试输出:
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.
Run Code Online (Sandbox Code Playgroud)
后跟SQL异常(不能在id列中输入null ).
因此,正确传递的唯一值是额外提供的字符串.我已经验证字段名称是正确的,此时对象不为空,并且字段已正确填充.
我也尝试使用parameterType="CustomItem"而不是parameterType="map"结果没有改变.
如果有人能让我知道我在这里缺少什么,我将不胜感激.
提前致谢.
PS:我也遇到了与insert语句相同的问题.
您需要在mapper方法中指定其他参数的名称.我假设CustomItem是一个Java bean,带有field1等的get方法.如前所述,更改参数类型,使其不是Map.
从mybatis 文档中,
您可以将多个参数传递给mapper方法.如果这样做,默认情况下它们将按参数列表中的位置命名,例如:#{1},#{2}等.如果您想更改参数名称(仅限多个),则可以在参数上使用@Param("paramName")注释.
所以,改变你的Mapper,
public interface CustomItemMapper
{
Integer insert(@Param("item")CustomItem item, @Param("extra") String someparam);
}
Run Code Online (Sandbox Code Playgroud)
并将您的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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21076 次 |
| 最近记录: |