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