ITKeyword,专注技术干货聚合推荐

注册 | 登录

Mybatis异常-SQL执行没反应,但oracle单独执行正常

loongshawn 分享于 2016-01-13

推荐:MyBatis直接执行SQL的工具SqlMapper

可能有些人也有过类似需求,一般都会选择使用其他的方式如Spring-JDBC等方式解决。 能否通过MyBatis实现这样的功能呢? 为了让通用Mapper更彻底的支持多表操作以

2018阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=gh9qh5ki&utm_source=gh9qh5ki

转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50512475

运行环境

SpringBoot

表现结果

1、有的SQL能够执行,有的SQL不行,运行也不报错,但就是执行后没有效果。
2、但SQL单独再oracle中是执行成功的。

SQL片段

<select id="checkDaohangProcessedStatusByRefid" parameterType="Map" resultType="java.lang.Integer">
        SELECT count(*)
        FROM TBS_ROAD t
        WHERE t.id = #{id} AND t.status = '04' AND t.clienttype = #{organization}
    </select>

    <select id="checkPoiProcessedStatusByRefid" parameterType="Map" resultType="java.lang.Integer">
        SELECT count(*)
        FROM T_TABLE_BAOCUO t
        WHERE t.id = #{id} AND t.status = '03' AND t.clienttype = #{organization}
    </select>

    <update id="closeDaohangInfoByRefid" parameterType="Map">
        UPDATE TBS_ROAD t
        SET t.status = '05'
        WHERE t.id = #{id} AND t.clienttype = #{organization}
    </update>

    <update id="closePoiInfoByRefid" parameterType="Map">
        UPDATE T_TABLE_BAOCUO t
        SET t.status = '01'    
        WHERE t.id = #{id} AND t.clienttype = #{organization}
    </update>

Java Mapper接口

// 2016-01-07 add
    public OnStarPoi selectPoiInfoByRefid(String id);

    public OnStarDao selectDaohangInfoByRefid(String id);

    public Integer updatePoiReceiveInfoByRefid(HashMap<String,String> map);

    public Integer updateDaohangReceiveInfoByRefid(HashMap<String,String> map);

    // 2016-01-12 add
    public List<OnStarPoi> selectPoiInfoAll(String organization);

    public List<OnStarDao> selectDaohangInfoAll(String organization);

    // 2016-01-13 add
    // public Integer checkPoiProcessedStatusByRefid(String id);

    public Integer checkDaohangProcessedStatusByRefid(HashMap<String,String> map);

    // public Integer checkPoiCloseStatusByRefid(String id);

    public Integer checkDaohangCloseStatusByRefid(HashMap<String,String> map);

    // public Integer openPoiInfoByRefid(String id);

    public Integer openDaohangInfoByRefid(HashMap<String,String> map);

    // public Integer closePoiInfoByRefid(String id);

    public Integer closeDaohangInfoByRefid(HashMap<String,String> map);

Java执行片段

Integer count = 0;

// 封装
HashMap<String,String> map = new HashMap<String,String>();
map.put("id", issue_id);
map.put("organization", organization+"");

count = issueMapper.updatePoiReceiveInfoByRefid(map);   

异常排查

查看当时请求的接口参数:

推荐:mybatis执行批量更新batch update 的方法(oracle,mysql)

引用:http://my.oschina.net/jsonavaj/blog/265112 oracle和mysql数据库的批量update在mybatis中配置不太一样: oracle数据库: <update id="batchUpdate" par

{"key":"12344445556666",
"user":"fffff",
"method":"gaokuaiOnstarFeedbackSelectAll",
"operation_type":"03",
"organization":10,
"type":"02",
"data":[ {"gaokuai_id":" 600001357"}
       ]
}

瞥一眼,还真看不出来是哪块问题,我是通过RESTClient工具调试接口。
这里写图片描述

倒腾了1小时,以为配置出错了。后来才发现是” 600001357”前面多了个空格,删除掉就OK了。

"data":[ {"gaokuai_id":" 600001357"}

删除后为:

"data":[ {"gaokuai_id":"600001357"}

所以,大伙如果再碰到类似情况,就检查下自己的请求参数是不是有问题。

错误总结

后续对待接口中的参数,要进行预处理,比如去掉前后的空格符号,使用java的trim()函数。

Integer count = 0;

// 封装
HashMap<String,String> map = new HashMap<String,String>();
map.put("id", issue_id.trim());
map.put("organization", organization+"");

count = issueMapper.updatePoiReceiveInfoByRefid(map);   

推荐:ORACLE 动态执行SQL语句

Oracle 动态SQL Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。试验步骤如下: 1. DDL 和 DML Sql代码   /*** DDL ***/   begin 

转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50512475 运行环境 SpringBoot 表现结果 1、有的SQL能够执行,有的SQL不行,运行也不报错,但就是执行后没有效果。 2、但SQL
在线网页数据采集器

相关阅读排行


用户评论

游客

在线网页数据采集器

相关内容推荐

vivo京东自营官方旗舰店

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。