技术标签: querydsl paix 分页 组合算法 web开发 mongodb
上节已经生成了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);
}
}
为了启用QueryDsl查询,需要简单继承QueryDslPredicateExecutor接口。
public interface UserRepository extends
MongoRepository<User, String>, QueryDslPredicateExecutor<User>
实现值相等查询。
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));
实现字符串开头或结尾的模糊查询。
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);
实现范围查询
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等,留给善于探索的读者。
文章浏览阅读1.4k次,点赞4次,收藏13次。文章目录1 大整数因子分解算法1.1 连分数因子分解1.2 二次筛法1.3 数域筛法1.4 Pollard ρ1.5 Pollard p-11.6 P+1算法1.7 椭圆曲线法2 离散对数2.1 小步大步法2.2 Silver-Hellman-Pholig3 模p开平方计算数论学习记录,如有错误,欢迎评论区指正。1 大整数因子分解算法寻找x2≡y2 (mod p)x^2\equiv y^2\ (mod\ p)x2≡y2 (mod p)来分解N。连分数、二次_连分数因子分解
文章浏览阅读199次。(1)从某个源点到其余各顶点的最短路径Dijkstra的代码如下:头文件:#defineINFINITY10000#defineMAX_VERTEX_NUM20typedefintInfoType;typedefcharVertexType;typedefintVRType;typedefenum...{DG,DN,UDG,UDN}GraphKind;typedefstructA..._please input the number of vertex n
文章浏览阅读5.5k次。主:[mysqld]lower_case_table_names=1datadir=/mnt/mysql/datasocket=/mnt/mysql/mysql.socklog-error=/mnt/mysql/log/mysqld.logpid-file=/mnt/mysql/mysqld.pidwait_timeout=2147483interactive_timeout=2147483character_set_server=utf8init_connect='SET._my.cnf配置的server_id
文章浏览阅读278次,点赞10次,收藏7次。堆排序的效率在各种排序中有比较高的效率,时间复杂度为O(nlog2n)_堆排序加入一个节点
文章浏览阅读515次。2020-07-15 16:30:47,365 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Can't get Master Kerberos principal for use as renewer at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesIntern_sqoop 脚本添加kerbores认证
文章浏览阅读779次。1. 安装fcitx中文输入法或sougou拼音输入法 * `sudo apt-get install fcitx-pinyin` * sougou + `sudo add-apt-repository ppa:fcitx-team/nightly` + `sudo apt-get update` 添加软件源,在使用之前要先更新_ubuntu sublim 中文字体
文章浏览阅读2.9k次,点赞4次,收藏5次。前提:python初学者。自学过程中发现很多网上没有说清楚的解决方案,因此自己记录下来。老师让安装sqliteman:sudo apt install sqliteman提示:E: 无法定位软件包 sqliteman看网上主要是两种解决方案:1.换源。尝试后再安装还是同样的问题。2.第二种方式如下图:尝试了还是无法解决https://blog.csdn.net/Z_YMing/article/details/95041427男朋友是程序员,问了他以后,说让我先安装sqlite1/安装sqli_无法定位软件包 sqliteman
文章浏览阅读126次。c语言程序设计一章部分和第三章习题答案实 验 报 告课程名称 C语言程序设计A实验项目 编程环境认知与顺序程序设计实验仪器 PC机一台学 院_____信息管理学院_______专 业 信息管理与信息系统班级/学号 信管1302班学生姓名 吴玉元实验日期 2014年3月成 绩 _________________..._中国大学c语言程序设计单元测试第三章答案
文章浏览阅读7k次。详细描述QChartView是一个独立的图标小部件。QChartView是一个独立的可以显示图表的部件。它不需要分离的QGraphicsScene就可以工作。如果你想要在已经存在的QGraphicsScene中显示一个图表,你需要使用QChart(或者QPolarChart)类(来替代QChartView)。成员函数(API)QChartView::QChartVi_qt class : public qchartview
文章浏览阅读8.9k次,点赞2次,收藏47次。构建适应数字化时代的网络安全防护体系,通过建立信任实现数字化业务的连接,通过控制风险抵御连接过程中的威胁,基于风险与信任的控制,保障网络安全防护体系落地。_网络安全防护体系
文章浏览阅读4k次。1.函数的定义 2.函数的返回语句 3.函数参数的应用 4.函数的调用_c语言引用函数
文章浏览阅读1.2k次。531写晶振校准值到OTP中开发过580/585的用户应该知道,想要将晶振校准值烧录到OTP中,我们只需往芯片的OTP Header中的某个固定的位置烧录一个两个字节的值即可。531的情况不太一样。DA14531的OTP Header分成了两部分: Configuration Script和Main group:其中,Main group存放一些常用的配置如:SPI FLASH 引脚,蓝牙 MAC 地址,时间戳等;特定的OTP位置位置,有其特定的含义。Configuration Script提供了比_14531 otp烧录