QueryWrapper有那些
时间: 2024-08-14 20:02:35 浏览: 58
QueryWrapper是Spring Data JPA库中的一个强大工具类,它允许你在编写数据库查询时使用类似于SQL的链式API,使得复杂的查询变得简洁易读。QueryWrapper主要用于动态构建HQL(Hibernate Query Language)查询条件,支持对单表或多表的操作,包括但不限于:
1. **基本操作**:提供where、eq、ne、lt、gt、le、ge等方法用于设置查询条件,如`queryWrapper.eq("field", value)`表示字段等于某个值。
2. **逻辑运算符**:支持and、or、not等逻辑连接,如`queryWrapper.eq("field1", value).and(eq("field2", anotherValue))`。
3. **范围操作**:like、in、between、startsWith、endsWith等方法处理模糊匹配、包含关系和范围查询。
4. **聚合函数**:提供count、sum、avg、min、max等方法,可以与group by一起使用。
5. **关联操作**:对于多对一、一对一或一对多的关系,可以设置子查询或嵌套的QueryWrapper,方便在JOIN条件下查询。
6. **排序和分页**:使用orderBy和limit方法指定查询结果的排序和限制返回的数量。
7. **复杂查询**:支持嵌套使用QueryWrapper,组合多种条件创建更复杂的查询结构。
相关问题
QueryWrapper有那些中立
在MyBatisPlus的QueryWrapper中,有一些常用的中立操作符,它们主要用于构建动态查询条件,而不会改变原有的查询结果集。这些中立操作符包括:
1. **and() / or()**: 这些方法用于添加额外的条件,并与其他条件组合,比如`new QueryWrapper().eq('field', value).and().gt('anotherField', anotherValue)`,表示同时满足两个字段的条件。
2. **ne() / eq() / gt() / ge() / lt() / le()**: 分别代表“不等于”、“等于”、“大于”、“大于等于”、“小于”和“小于等于”,它们都是返回一个新的QueryWrapper实例并添加条件。
3. **in() / notIn()**: 添加包含或排除特定值的范围查询,如`new QueryWrapper().in('field', Arrays.asList(values))`。
4. **between() / notBetween()**: 定义字段值在给定范围内的查询条件。
5. **like() / notLike()**: 匹配包含或不包含指定模式的字符串,可以配合通配符 `%` 和 `_` 使用。
6. **startWith() / endWith() / contain()**: 检查字符串是否以某个子串开始、结束或包含。
7. **not()**: 添加否定条件,如`new QueryWrapper().not().eq('field', value)`,表示该字段不等于指定值。
8. **allEq()**: 同时设置多个字段相等,如`new QueryWrapper().allEq(mapOfFields)`, 其中mapOfFields是一个键值对的Map。
9. **exists**: 判断是否存在符合条件的记录,常用于子查询。
这些操作符返回的是一个修改后的QueryWrapper,但并不会立即执行查询,直到调用`list()`、`count()`等方法才会触发实际的数据库查询。
querywrapper排除空值查询
你可以使用querywrapper的is_not_null方法来排除空值查询。下面是一个示例:
```python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.expression import and_, or_
from sqlalchemy.orm.query import Query
from sqlalchemy import text
engine = create_engine('sqlite:///example.db')
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 添加一些用户数据
session.add_all([
User(name='Alice', age=25),
User(name='Bob', age=30),
User(name='Charlie', age=None),
User(name='David', age=None)
])
session.commit()
# 查询年龄不为空的用户
query = session.query(User).filter(User.age.isnot(None))
results = query.all()
print(results)
```
在这个示例中,我们定义了一个User模型,它有一个名为age的属性。我们创建了一些用户数据,并使用is_not_null方法来查询年龄不为空的用户。这将排除那些age属性为None或NULL的用户。
阅读全文