首页 新闻 赞助 找找看

mybatis的count为什么总是返回0?

0
悬赏园豆:40 [已解决问题] 解决于 2017-12-12 08:03
    <!--统计指定节点子节点具有指定节点名称的数目-->
    <select id="countChildrenWithNameInNode" parameterType="java.util.HashMap"  resultType="java.lang.Integer" databaseId="oracle">
        SELECT COUNT(*) CNT
        FROM "ORG_NODE"         
        <where>
            <if test="pId!=null and pId!=''">
                PARENT_ID=#{pId}
            </if>            
            <if test="nodeName!=null and nodeName!=''">
                AND NODE_NAME=#{nodeName}
            </if>
        </where>
    </select>

输出调试信息:

复制代码
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a9e1e62] was not registered for synchronization because synchronization is not active
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@afebc12] will not be managed by Spring
==>  Preparing: SELECT COUNT(*) value FROM "ORG_NODE" WHERE PARENT_ID=? AND NODE_NAME=? 
==> Parameters: f86b732c75e447a7a34b472a4dc8a9de(String), R(52)(String)
<==    Columns: VALUE
<==        Row: 0
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a9e1e62]
复制代码

 

很简单的一个SQL语句,为什么总是返回0。用调试信息输出的语句测试,返回结果不是0。

数据库是oracle。

这里有个类似的提问:http://mybatis-user.963551.n3.nabble.com/Problem-with-count-in-mybatis-td3715763.html

万里沙来手一挥的主页 万里沙来手一挥 | 初学一级 | 园豆:196
提问于:2017-07-19 09:10
< >
分享
最佳答案
0

这里sql打印出来的Total:1 ,不是指count(*)结果是1,而是表示结果集是1,无论count(*)是否查到数据了,结果集都会返回1的。你count出来为0,说明sql查出来就是0条符合条件的数据。请检查下参数顺序以及NODE_NAME是否确实是  R(52)

收获园豆:40
yori2012 | 菜鸟二级 |园豆:242 | 2017-12-06 23:18
其他回答(6)
0

Count(*)和value之间不需要逗号么?
另外,你是啥数据库呢?

幻天芒 | 园豆:37175 (高人七级) | 2017-07-19 09:17

 不是value的问题,改过这个也没用

支持(0) 反对(0) 万里沙来手一挥 | 园豆:196 (初学一级) | 2017-07-19 09:18

value是给字段重新取的名字,不是另外一个字段

支持(0) 反对(0) 万里沙来手一挥 | 园豆:196 (初学一级) | 2017-07-19 09:19

@万里沙来手一挥: 你可以去掉查询条件试试,多半是查询条件导致的,

还可以监控最终执行的sql,手动执行试试,

最后,你还需要看看你是用代码执行这个sql的,有些方法返回的是受影响的行数。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2017-07-19 09:21
0

你看下两个问号传值了没,语句应该没错 最可能就是?号传值有问题

Master_er | 园豆:53 (初学一级) | 2017-07-19 10:35
0

java代码是用什么接的这个值?方便贴下吗

无殇-x | 园豆:9 (初学一级) | 2017-07-19 16:04

用int

int countFactorWithName = orgNodeService.countChildrenWithNameInNode(devId, col);

支持(0) 反对(0) 万里沙来手一挥 | 园豆:196 (初学一级) | 2017-07-19 16:07

@万里沙来手一挥: 调试了吗 ? 是走到这就是0了 还是传到前台后才变为0的?

支持(0) 反对(0) 无殇-x | 园豆:9 (初学一级) | 2017-07-19 16:19

@初学者_XH: 走到这里 就是0了,在调试信息中能看到生成的SQL语句和查询结果

支持(0) 反对(0) 万里沙来手一挥 | 园豆:196 (初学一级) | 2017-07-20 08:47

@万里沙来手一挥: 那我就不会了...

支持(0) 反对(0) 无殇-x | 园豆:9 (初学一级) | 2017-07-21 11:53
0

你的表名字为什么要用双引号引起来,

CNT 是COUNT(*)的别名,

吉吉的城 | 园豆:566 (小虾三级) | 2017-07-19 21:23

 oracle中如果区分大小写需要括起来,全大写的可以不用括

支持(0) 反对(0) 万里沙来手一挥 | 园豆:196 (初学一级) | 2017-07-20 08:46

@万里沙来手一挥: 

resultType="java.lang.Integer" 返回类型会不会不是这个???而是一个对象

支持(0) 反对(0) 吉吉的城 | 园豆:566 (小虾三级) | 2017-07-22 00:37
0

你把sql语句放到plsql中执行一下,看有没有数据记录!

MaxFish | 园豆:165 (初学一级) | 2017-08-15 09:08
0

解决之前没看懂,解决之后看懂了,这还是自己搜索和思考的方式有问题吧

鸡汤锦鲤 | 园豆:202 (菜鸟二级) | 2019-08-23 10:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册