背景:
今天遇到的问题是自己晚上在做毕业设计的时候使用到mybatis查询订单数量。存在2个情况,其中一种是管理员需要查询所有的订单总量,另外一种普通用户需要查询自己的订单总量。这2种情况的区别是第二种需要传入一可以识别是普通用户的唯一标识。毕业设计中使用的是userId。如果不经思考,这就需要写2个sql语句,一个是select count(*) from order.这适用于管理员的,另外一个是select count(*) from order where userid=普通用户的唯一标识。2者有相同情况,我想用一个在Dao中用一个方法来实现。
实现方式:
Mybatis支持条件语句。刚好可以实现自己的需要。于是我写了一个
xml写成如下:
然后我跑起了工程,发现一跑就报错。错误是org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userId' in 'class Java.lang.Integer。一对比发现参数正确、返回值正确。没撒错误呀。想一想还是没有发现问题,百度说去掉if,不过我要使用的就是if.后面查找资料说在DAO方法中定义的参数 与 实体中定义的属性不一致 导致的,dao层加@Param("userId")注解即可。最后方法变为如下:
再次运行程序正确。我一想我的类型一致,不可能说是不一致的问题。后面查到@Param("id") :全局限定别名,定义查询参数在sql语句中的位置不再是顺序下标0,1,2,3....的形式,而是对应名称,该名称就在这里定义。 因此可以找到userId了。
每天写一点,收获一点。经验不足,难免存在问题,欢迎指出指导。谢谢