構造器去構造條件的時候,我們都知道eq方法去鏈式的時候是自動添加and的,那如果需要and的那個條件需要加括號呢?
環境
Jdk 1.8、mybatis-plus 3.5.3.2、mysql?5.7.11
示例
sql:
select * from user where openid = 1 and (phone is not null or phone = '')
QueryWrapper:
QueryWrapper<user> wrapper = new QueryWrapper<>();
wrapper.eq("openid", openid.toString());
wrapper.and(tempWrapper -> tempWrapper.isNull("phone").or().eq("phone",""));
baseDao.selectList(wrapper);
LambdaQueryWrapper:
LambdaQueryWrapper<user> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(user::getOpenId, openid.toString());
wrapper.and(tempWrapper ->tempWrapper.isNull(user::getPhone).or().eq(user::getPhone,""));
baseDao.selectList(wrapper);
總結
LambdaQueryWrapper
?是?QueryWrapper
?的一個變種,它使用 Java 的 lambda 表達式和實體類的屬性名,而不是字段名的字符串,來指定條件。這樣做的好處是類型安全,并且避免了因為字段名寫錯導致的錯誤。
上面例子中QueryWrapper
?和LambdaQueryWrapper
?的and方法分別是接收Consumer<QueryWrapper<User>>
?類型和Consumer<LambdaQueryWrapper<User>>
?類型的參數,實際上是一個lambda表達式,這個 lambda 表達式內部使用了?tempWrapper
這個參數其實相當于是臨時構造器來進行添加條件。