MyBatis中批量更新的错误

blackleech 2017-08-14 08:36:48
实现 批量删除 在Mybatis中写了这样的一句 语句

<!--批量删除-->
<update id="batchDeletionByListId" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";">
UPDATE t_skin
<set>
is_delete = 1
</set>
WHERE
skin_id = #{item.skinId}
/* WHERE skin_id = #{skinId}*/
</foreach>
</update>


java代码部分是这样的

@Path("XXXXXXXXX")
@POST
public IServiceResponse batchDeletionGameSkinAction(String skinId, @Context HttpServletRequest request) {
JSONObject jsonObject = JSONObject.fromObject(skinId);
JSONArray jsonArray = JSONArray.fromObject(jsonObject);
List<BatchDeletionRequest> listArray = (List<BatchDeletionRequest>)
JSONArray.toCollection(jsonArray, BatchDeletionRequest.class);

Integer result = skinManager.batchDeletionByListID(list);
}


java代码执行到
Integer result = skinManager.batchDeletionByListID(list);
这一行是出现

==> Preparing: UPDATE t_skin SET is_delete = 1 WHERE skin_id = ? /* WHERE skin_id = ?*/ ; UPDATE t_skin SET is_delete = 1 WHERE skin_id = ? /* WHERE skin_id = ?*/


ERROR c.m.f.c.s.mapper.JsonThrowableMapper [Logger.java:276] - nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '' in 'class java.lang.String'

SQL语句在编译中运行能够运行 但在这里就会出现这种错误
我还注意到,这里没有显示传递的参数,是这个List集合死了问题,我的List<String>没有错啊 ,SQL中skin_Id也是varchar类型,如果我的想法是对的,我就不知道怎么修改了
还请大家帮帮忙
...全文
476 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackleech 2017-08-17
  • 打赏
  • 举报
回复
是个是编号 的字段
ligen320 2017-08-16
  • 打赏
  • 举报
回复
skinId 什么意思
strong_mz 2017-08-15
  • 打赏
  • 举报
回复
foreach 循环整个sql是有问题的吧 我感觉你应该写一个语句 然后在Java代码中循环的遍历集合 调用更新方法
blackleech 2017-08-14
  • 打赏
  • 举报
回复

        JSONObject jsonObject = JSONObject.fromObject(skinId);
        JSONArray jsonArray = JSONArray.fromObject(jsonObject);
        ArrayList<BatchDeletionRequest> listArray = (ArrayList<BatchDeletionRequest>)
                JSONArray.toCollection(jsonArray, BatchDeletionRequest.class);

        List<String> list = null;
        for (int i = 0;i < listArray.size();i++){
            list = listArray.get(i).getSkinId();
        }

        Integer result = skinManager.batchDeletionByListID(list);
上述是我在Action成中接受参数将,数组形式的json转化成list形式,我的JavaBean也就是BatchDeletionRequest封装类中的成员变量是

public class BatchDeletionRequest extends AbstractServiceResponse {
    private List<String> skinId;

    public List<String> getSkinId() {
        return skinId;
    }

    public void setSkinId(List<String> skinId) {
        this.skinId = skinId;
    }
}
这样转化成ArrayList集合后,就需要获取集合中的封装类中集合中的String类型的skinId debug模式中传递到Dao成中list集合参数中的内容是我想考的skinid数据,但在Mapper.xml中就会出现这样的错误,我也不知道这是因为什么,有点迷了 希望能得到大家帮助 感谢
qq_32154711 2017-08-14
  • 打赏
  • 举报
回复
写个语句,在java里面反复调用
blackleech 2017-08-14
  • 打赏
  • 举报
回复
参数怎么会是这个样子
blackleech 2017-08-14
  • 打赏
  • 举报
回复
再一次调试

 <!--批量删除-->
    <update id="batchDeletionByListId" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" separator=";">
            UPDATE t_skin
            <set>
                is_delete = 1
            </set>
            WHERE
            <if test="_parameter!=null and _parameter!=''">
                skin_id = #{_parameter}
            </if>

        </foreach>
    </update>
得到结果

2017-08-14 21:35:31.409 [http-bio-8081-exec-6] DEBUG java.sql.Connection [Slf4jImpl.java:43] - ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@745fef9e]
2017-08-14 21:35:31.413 [http-bio-8081-exec-6] DEBUG java.sql.Connection [Slf4jImpl.java:43] - ==>  Preparing: UPDATE t_skin SET is_delete = 1 WHERE skin_id = ? ; UPDATE t_skin SET is_delete = 1 WHERE skin_id = ? 
2017-08-14 21:35:31.494 [http-bio-8081-exec-6] DEBUG java.sql.PreparedStatement [Slf4jImpl.java:43] - ==> Parameters: {list=[skin201708092, skin201708091]}(StrictMap), {list=[skin201708092, skin201708091]}(StrictMap)
2017-08-14 21:35:35.675 [http-bio-8081-exec-6] INFO  o.a.c.i.LoggingOutInterceptor [AbstractLoggingInterceptor.java:253] - Outbound Message
blackleech 2017-08-14
  • 打赏
  • 举报
回复
注释都拼接起来 可能是底层ognal的原因吧 你是说
<update id="batchDeletionByListId" parameterType="java.util.List">
应该是listArray对吗
xiaovhao 2017-08-14
  • 打赏
  • 举报
回复

  Integer result = skinManager.batchDeletionByListID(list);
这里不是应该是listArray嘛,还有我很好奇为啥连注释也一起循环拼接上去了
blackleech 2017-08-14
  • 打赏
  • 举报
回复
这个条件是存在的 mybatis中的语句是这样的

<!--批量删除-->
    <update id="batchDeletionByListId" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" separator=";">
            UPDATE t_skin
            <set>
                is_delete = 1
            </set>
            WHERE
            <if test="_parameter != null">
                skin_id = #{_parameter}
            </if>

        </foreach>
    </update>
blackleech 2017-08-14
  • 打赏
  • 举报
回复
但我 把 Mapper.xml中的批量删除语句修改 成

 <!--批量删除-->
    <update id="batchDeletionByListId" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" separator=";">
            UPDATE t_skin
            <set>
                is_delete = 1
            </set>
            WHERE
            <if test="_parameter != null">
                skin_id = #{_parameter}
            </if>

        </foreach>
    </update>
将原有的
skin_id = #{item.skinId}
修改为
skin_id = #{_parameter}
,这样后,运行时没有什么提示错误的信息,当数据库中的数据也不进行改动了 不知道怎么正确执行了
天涯若风 2017-08-14
  • 打赏
  • 举报
回复
mybatis批量操作数据库SQL写的有问题。在条件那里。
Mybatis-plus是MyBatis增强工具包,用于简化CRUD操作。该工具包为MyBatis提供了一些高效,有用,即用的功能,使用它可以有效地节省您的开发时间。Mybatis-plus特征与MyBatis完全兼容 启动时自动配置 开箱即用的用于操作数据库的界面 强大而灵活的条件包装器 生成主键的多种策略 Lambda样式的API 全能和高度可定制的代码生成器 自动分页操作 SQL注入防御 支持活动记录 支持可插拔的自定义界面 内置许多有用的扩展Mybatis-plus功能1、单表CURD(简单 + 批量)操作,自动完成(支持 like 比较等查询)。 2、分页插件,Count查询自动或自定义SQL查询。 3、Spring根据不同环境加载不同配置支持(支持typeAliasesPackage通配符扫描)。 【自动生成Entity Mapper Service文件】Mybatis-plus(Mybatis增强工具包) v3.3.2更新日志分页参数提取,单元测试用例修复 达梦数据库代码生成器表过滤支持 微软数据库代码生成器表过滤支持 修复代码生成器属性字段规则错误 SelectById 支持自定义方法名 修复分页插件获取数据库类型问题 Json转换器空值处理 bugfix(mybatis-plus-generator):SQL类型返回错误问题 调整未知方言异常,自动识别url转换小写匹配. fix: 初始化TableInfo遇到多个字段有@TableId注解时未能抛出异常的问题 SuperController有Class参数的set方法 增加方法StrategyConfig.setSuperServiceImplClass(java.lang.Class<?>). 代码生成器命名策略调整. 扩展分页缓存key值计算. 去除方法推测,直接访问属性字段. 修正枚举处理器类型不匹配比较. 修改表前缀匹配方式 修改在Mybatis全局配置文件设置分页插件参数不生效问题 修改在Mybatis全局配置文件设置分页插件参数不生效问 修复PR未指定解析器的时候引发空指针 增加分页插件limit参数配置 修复指定superEntityClass重复生成父类字段问题 无主键的情况无需导入IdType与TableId包 调整生成BaseResultMap格式 支持lombok模式下选择是否进行链式set生成 修复解析器for update错误 过滤PG约束列(只留下主键约束) 增加生成器禁用模板生成 fix(kotlin): 修复动态表名BUG,最大努力替换表名 修复PG约束生成重复属性字段问题 fix(kotlin): 将LambdaUtils缓存的key改为String 代码生成器增加数据库关键字处理接口 fix github/issues/2454 支持注解可继承 新增 AES 加密数据库用户名密码 优化方法入参泛型,支持更多类型 修复代码生成器开启移除is前缀生成实体缺少包导入 fixed github issues/2470Mybatis-plus截图

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧