QueryDsl查询mongodb数据2
2017-10-27 15:54
225 查看
QueryDsl查询实例
上节已经生成了Query类,本文通过示例说明如何通过Query类实现灵活查询。示例类及查询类
为了说明示例,这里定义简单的User类,以及依据User类生成的QUser类。User类:
@Document public class User { @Id private String id; private String name; private Integer age; // standard getters and setters }
QUser类:
Query类是通过gradle插件自动生成的。
/** * QUser is a Querydsl query type for User */ @Generated("com.mysema.query.codegen.EntitySerializer") public class QUser extends EntityPathBase<User> { private static final long serialVersionUID = ...; public static final QUser user = new QUser("user"); public final NumberPath<Integer> age = createNumber("age", Integer.class); public final StringPath id = createString("id"); public final StringPath name = createString("name"); public QUser(String variable) { super(User.class, forVariable(variable)); } public QUser(Path<? extends User> path) { super(path.getType(), path.getMetadata()); } public QUser(PathMetadata<?> metadata) { super(User.class, metadata); } }
QueryDslPredicateExecutor接口
为了启用QueryDsl查询,需要简单继承QueryDslPredicateExecutor接口。public interface UserRepository extends MongoRepository<User, String>, QueryDslPredicateExecutor<User>
Eq
实现值相等查询。QUser qUser = new QUser("user"); Predicate predicate = qUser.name.eq("Eric"); List<User> users = (List<User>) userRepository.findAll(predicate);
也可以指定多个条件
Predicate nameAndAgeAre = qUser.name.eq("Foo").and(qUser.age.eq(22));
StartingWith and EndingWith
实现字符串开头或结尾的模糊查询。QUser qUser = new QUser("user"); Predicate predicate = qUser.name.startsWith("A"); List<User> users = (List<User>) userRepository.findAll(predicate);
字符串结尾查询:
QUser qUser = new QUser("user"); Predicate predicate = qUser.name.endsWith("c"); List<User> users = (List<User>) userRepository.findAll(predicate);
Between
实现范围查询QUser qUser = new QUser("user"); Predicate predicate = qUser.age.between(20, 50); List<User> users = (List<User>) userRepository.findAll(predicate);
组合查询
实现多个或组条件组合查询,摘录项目中的示例代码如下:QUser qUser = new QUser("user"); Predicate userCode = qUser.userCode.endsWith("4"); Predicate userName = qUser.userName.endsWith("9").or(qUser.userName.endsWith("8")); BooleanBuilder example = new BooleanBuilder(); example.and(userCode).or(userName); List<SysOrg> orgList = (List<SysOrg>)orgDao.findAll(example); assertThat(orgList,hasSize(3));
测试分页
QSysOrg qSysOrg; qSysOrg = new QSysOrg("sysOrg"); Predicate predicate = qSysOrg.orgCode.startsWith("tx"); Pageable pageable = PageRequest.of(0,5); Page<SysOrg> orgList = orgDao.findAll(predicate,pageable); assertThat(orgList.hasNext(),is(true)); assertThat(orgList.getSize(),is(5));
测试排序
QSysOrg qSysOrg = QSysOrg.sysOrg; Predicate predicate = qSysOrg.orgCode.startsWith("tx"); OrderSpecifier orderSpecifier = qSysOrg.orgCode.asc(); List<SysOrg> orgList = (List<SysOrg>)orgDao.findAll(predicate,orderSpecifier); SysOrg org = (SysOrg) orgList.get(0); assertThat(org.getOrgCode(),is("tx001"));
总结
除了上述方法,还有很多功能强大的方法,如:like,contain等,留给善于探索的读者。相关文章推荐
- MongoDB小技巧-用ObjectID查询某一时间范围内的数据
- python操作mongodb根据_id查询数据的实现方法
- C#多线程更新,查询MongoDB数据
- MongoDB指定类型查询数据
- MongoDB - 空间数据存储、建立索引、空间查询
- MongoDB数据查询,分页,排序
- tp5+Mongodb查询时间段内的数据
- 初学MongoDB实践笔记——安装、创建数据库、保存及查询数据
- python中使用collection.find()在mongodb中查询大量数据时的问题
- MongoDB 日期查询与mongodump 按日期范围导出数据
- mongodb数据查询(进阶篇)
- Mongodb百亿级数据添加,修改,删除,查询等性能测试【四】
- java操作mongodb——查询数据
- mongodb常用数据查询筛选命令行操作
- django 操作mongoDB Mongoengine教程(3)——数据查询
- 使用C#对MongoDB中的数据进行查询,改动等操作
- MongoDB的地埋空间数据存储、空间索引以及空间查询
- MongoDB 查询昨日/昨天数据
- MongoDB新增及查询数据(一)
- MongoDB group by max 分组查询组内最大的数据,并获取相应的数据