Mybatisplus的queryWrapper对字段做函数处理
时间: 2023-12-16 10:02:57 浏览: 72
Mybatisplus的queryWrapper提供了lambda表达式来方便地构造查询条件,但是它并不支持对字段做函数处理。不过,你可以通过使用SQL函数来对字段进行函数处理,例如在where子句中使用函数:
```java
QueryWrapper<Entity> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(Entity::getName, "张三")
.and(i -> i.apply("date_format(create_time,'%Y-%m-%d') = '2022-01-01'"));
List<Entity> entityList = entityMapper.selectList(wrapper);
```
其中,apply方法可以接受一个SQL表达式,你可以在其中使用SQL函数对字段进行处理。在上面的例子中,我们使用了MySQL中的date_format函数来对create_time字段进行格式化处理,然后再和固定的日期进行比较。这样就可以实现对字段的函数处理了。
相关问题
Mybatisplus的queryWrapper的or对字段做函数处理
Mybatis-plus的QueryWrapper中的or方法可以使用Lambda表达式对字段进行函数处理,例如:
```
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.or(i -> Functions.upper(i.getStr("name")).like("%" + keyword.toUpperCase() + "%"))
.or(i -> Functions.length(i.getStr("phone")).gt(10));
```
在这个示例中,我们使用了Lambda表达式对name字段执行了upper函数,对phone字段执行了length函数,并将它们分别放在了两个or方法中,表示或者的关系。这样就可以在查询时对字段进行函数处理了。
QueryWrapper不等于函数
### 使用QueryWrapper实现不等于查询
在MyBatis-Plus中,`QueryWrapper` 提供了多种方法用于构建不同的查询条件。对于不等于查询,可以通过 `ne` 方法来设置字段与给定值不相等的条件[^1]。
下面是一个具体的例子,假设有一个学生实体类 `Student` 和对应的Mapper接口 `StudentMapper`:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class StudentService {
@Autowired
private StudentMapper studentMapper;
public List<Student> getStudentsNotInClass(String className) {
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
// 设置班级名称不等于指定值
queryWrapper.ne("class_name", className);
return studentMapper.selectList(queryWrapper);
}
}
```
此代码片段展示了如何利用 `QueryWrapper` 的 `ne` 方法设定 “班级名称(class_name)” 字段与传入参数 `className` 不匹配作为查询条件,从而获取不属于特定班级的所有学生记录[^2]。
此外,在实际应用中还可以链式调用其他的方法进一步细化查询逻辑,比如增加更多的过滤条件或是排序规则等[^3]。
阅读全文