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中,除了统计数据,不要用基本类型来接收结果,最好都用包装类型。

  • 相关阅读:
    Python 一条语句如何在多行显示的问题
    代理模式
    MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
    异步加载 Echarts图的数据
    Web页面中两个listbox的option的转移
    半透明效果
    在地图上使图片透明
    加载图片方式
    获取鼠标坐标
    画笔与画刷
  • 原文地址:https://www.cnblogs.com/phdeblog/p/12155768.html
Copyright © 2011-2022 走看看