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处理,就能直接避免文章第一段所讲的情况。

 

 

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