🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 自定义实现 但是业务场景往往是复杂的,BeetSql也提供了非常好的拓展性,我们看下`filterNull` 的方法实现。 ```java public static StrongValue filterNull(Object value) { return new StrongValue() { @Override public boolean isEffective() { return value != null; } @Override public Object getValue() { return value; } }; } ``` 这个方法返回了一个`StrongValue`接口,实现了`isEffective`和`getValue`方法,如果`isEffective`方法返回true的时候表示将 `value` 加入查询条件,否则不加查询条件。 假如还是上面的场景,但是userName变成了模糊查询,我们可以自定义StrongValue ```java public static StrongValue filterLikeEmpty(String value) { return new StrongValue() { @Override public boolean isEffective() { return StringUtil.isNotEmpty(value); } @Override public Object getValue() { return "%"+value+"%"; } }; } ``` 查询语句可以变成下面这样: ```java public User findUser(String userName){ LambdaQuery<User> query = sqlManager.lambdaQuery(User.class); return query.andEq(User::getDeleteFlag,0) .andLike(User::getUserName,Query.filterLikeEmpty(userName)) .single(); } ``` 这样当userName为空时isEffective 为false,userName不加入查询,反之加入查询条件。 生成的查询语句为: ``` select * from user where delete_flag = 0 and user_name like "%myName%" limit 0,1 ```