zoukankan      html  css  js  c++  java
  • mybatis查询结果为空时的返回值问题

    先贴出配置文件

        <select id="queryUserGroupByName" resultType="UserGroupModel">
            select * from user_group where roleName='user' and  groupName=#{groupName}
        </select>

    对应的mapper

    List<UserGroupModel>queryUserGroupByName(String groupName);

    在写逻辑的时候发现,如果数据为空时,返回值并不是null

        @ResponseBody
        @RequestMapping("/addGroup")
        public WebResultDto insertUserGroup(String groupName,String stoArea){
            
            WebResultDto webResultDto = null;
            if(userInfoService.queryUserGroupByName(groupName) != null) {                    
                //已有重复用户名
                System.out.println(userInfoService.queryUserGroupByName(groupName));
                webResultDto = new WebResultDto("", "N", "此用户名已被注册!");
            }else {
                userInfoService.insertUserGroup(groupName, stoArea);
                webResultDto = new WebResultDto("","Y","");
            }
            return webResultDto;
        }

    例如上述代码  userInfoService.queryUserGroupByName(groupName)就不可能为null。

    网上查了一下,在mybatis中

    如果返回值是Java集合类型,如List、Map,会先初始化(new一个集合对象),再把结果添加进去。

    如果返回值是普通对象,查询不到时,返回值是null。

    解决方案:service层稍做处理

        @Override
        public List<UserGroupModel> queryUserGroupByName(String groupName) {
            // TODO Auto-generated method stub
            List<UserGroupModel> res = dao.queryUserGroupByName(groupName);
            if(res.size() == 0) {
                return null;
            }
            return res;
        }

    评论区有朋友好奇如果是基本类型,会出现什么情况?

    做了一个简单的测试

        @Select("select id from tb_box where box_no = #{name}")
        int selectId(@Param("name")String name);

    如果数据不存在,返回的依然是null,用基本类型来接收则会报错如下:

     

     所以为了健壮性,在mybatis中,除了统计数据,不要用基本类型来接收结果,最好都用包装类型。

  • 相关阅读:
    CentOS 上配置 lua 的服务器环境(enet)
    报错解决 unable to unroll loop, loop does not appear to terminate in a timely manner (994 iterations) or unrolled loop is too large, use the [unroll(n)] attribute to force an exact higher number
    开源许可证的选择
    Lua 协程
    [命令模式]在游戏开发中的应用
    NGUI 源码分析- AnchorPoint
    NGUI 源码分析- UIWidgetInspector
    Java程序员需要学习的知识点
    Linux下安装Perl和Perl的DBI模块
    Linux安装JDK
  • 原文地址:https://www.cnblogs.com/phdeblog/p/12155768.html
Copyright © 2011-2022 走看看