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