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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM