之前展示的方法,例如like,between,eq等,查看源碼發現里面都是重載方法,第一個參數都為boolean類型的condition,默認為true,默認執行
模擬背景:前端頁面有個查詢需要姓名和郵箱來作為查詢條件,填入姓名郵箱后,后端需要進行判斷后查詢sql
一:controller接收后判斷處理(原來的寫法)
模擬用戶查詢代碼:請求參數:name,email
/** *模擬前台傳入參數,name和email */ @Test public void testCondition(){ String name="王"; String email=""; condition(name,email); } private void condition(String name,String email){ QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //對name進行非空判斷 if(StringUtils.isNotEmpty(name)){ queryWrapper.like("name",name); } //對email進行非空判斷 if(StringUtils.isNotEmpty(email)){ queryWrapper.like("email",email); } List<User> userList = userMapper.selectList(queryWrapper); userList.forEach(System.out::println); }
結果:顯而易見,name作為查詢條件出現在了sql中,而email由於做了非空判斷沒有在sql中展示出來

二.使用condition后的寫法
/** *模擬前端傳入參數查詢符合條件用戶,查詢參數:name,email */ @Test public void testCondition(){ String name=""; String email="x"; condition(name,email); } private void condition(String name,String email){ QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //采用condition進行條件判斷,條件為true,進行查詢 queryWrapper.like(StringUtils.isNotEmpty(name),"name",name) .like(StringUtils.isNotEmpty(email),"email",email); List<User> userList = userMapper.selectList(queryWrapper); userList.forEach(System.out::println); }
結果:

通過condition來進行判斷極大的簡化代碼。。。。。。
