Maven項目學習(五)SSM項目,Mybatis進行if條件判斷參數是否爲空進行查詢

       不知道你有沒有遇到這種情況,在一個的數據列表中,我們需要對某些數據按條件進行檢索,你是否在服務器端裏面都要獲取條件,並且判斷第一個條件是否爲空,如果不爲空則繼續判斷第二個條件用戶有沒有選擇,不爲空則再繼續判斷第三個條件是否爲空,爲空則要寫第三個條件的else代碼,而且也要寫第一和第二條件爲空的else語句。並且爲其創建對應的業務接口方法及業務實現類,而且還要寫對應的sql語句才能完成操作。想到這裏一般心態都要爆炸了吧。如果按照上面那種模式開發,即代碼臃腫而且開發和維護麻煩,針對這種情況,就要藉助mybatisif條件判斷標籤幫忙了。

1.準備好前端頁面

我這裏有一個輸入框和兩個下拉列表

2.控制器層相應的處理方法

這裏的處理思路不建議借鑑

@RequestMapping(value = "/search")
    public ModelAndView search(@RequestParam(name = "pageNo",defaultValue = "1") int pageNo,@RequestParam(name = "pageSize",defaultValue = "15") int pageSize
    ,@RequestParam(name = "name",defaultValue = "") String name,@RequestParam(name = "userClass",defaultValue = "0") Integer userClass,@RequestParam(name = "houseId",defaultValue = "") String houseId){
        ModelAndView modelAndView = new ModelAndView();
//        System.out.println("name:"+name);
//        System.out.println("userClass:"+userClass);
//        System.out.println("houseId:"+houseId);

        if (name.equals("")&&userClass==0&&houseId.equals("")){
            //所有爲空不搜索,直接跳轉回所有數據
            modelAndView.setViewName("redirect:listAll");

            return modelAndView;
        }else{
            //只要有一個條件不爲空,都要查找
            Page<?> page = PageHelper.startPage(pageNo,pageSize);
            List<User> userList = userService.searchByNameUserClassHouseId(name,userClass,houseId);
            PageInfo<?> pageInfo = page.toPageInfo();
            User user1 = new User();
            user1.setName(name);
            modelAndView.addObject("user",user1);
            modelAndView.addObject("userlist",userList);
            modelAndView.addObject("pageHelper",pageInfo);

            List<House> houseList = houseBiz.selectAllHouse();
            modelAndView.addObject("houseList",houseList);

            modelAndView.addObject("hlist", houseBiz.selectAllHouse());
            modelAndView.addObject("clist",userClassBiz.selectAll());
            modelAndView.setViewName("users_search");
            return modelAndView;
        }
    }

3.業務層的實現類

4.數據庫處理層

接口類:

       注意這裏的方法的形式參數有@Param註解,這個註解是讓mybatis知道傳過來的數據的名稱,這些名稱對應映射文件的方法的參數。

映射文件:

if標籤裏的name等參數都對應着接口註解穿過來的參數名稱一致。而且要注意sql語句的寫法,我這裏有個where 1=1,這個永遠爲真的條件,爲什麼要這麼做?如果這裏的name爲空,則一定會跳到判斷userClass的,如果這時候userClass不爲空,則SQL語句就是select * from users where and user_class = #{userClass},就會報錯的,有1=1這個條件,就能避免這個問題

<select id="selectByNameUserClassHouseId" resultMap="user">
    select * from users where 1=1
    <if test="name != ''">
        and name like concat('%',#{name},'%')
    </if>
    <if test="userClass != 0">
        and user_class = #{userClass}
    </if>
    <if test="houseId != ''">
        and house_id = #{houseId}
    </if>
    and is_delete = '0'
</select>

把用戶提交過來的參數是否爲空交給mybatis處理,就能直接避免文章第一段所講的情況。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章