java - Java,CriteriaBuilder,带有可选参数“where”的查询
问题描述
我必须重写一些代码,但在互联网上找不到合适的信息。原始部分如下所示:
String query = "select * from sublog_type_map_v where 1 = 1";
if (responsibleGroupId != null && responsibleGroupId.length() != 0 && !responsibleGroupId.equals("0")) {
query += " and responsible_group_id = " + responsibleGroupId;
}
if (categoryId != null && categoryId.length() != 0 && !categoryId.equals("0")) {
query += " and category_id = " + categoryId;
}
if (typeId != null && typeId.length() != 0 && !typeId.equals("0")) {
query += " and type_id = " + typeId;
}
if (subtypeId != null && subtypeId.length() != 0 && !subtypeId.equals("0")) {
query += " and subtype_id = " + subtypeId;
}
我已经着手处理这段代码:
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<SublogTypeMapV> query = builder.createQuery(SublogTypeMapV.class);
Root<SublogTypeMapV> root = query.from(SublogTypeMapV.class);
query.select(root).where(builder.equal(root.get("responsibleGroupId"), responsibleGroupId));
但是这个“where”应该被认为是可选的,使用“if”表达式,以及其他三个参数(我稍后会添加)。我不知道该怎么做,有人可以帮我吗?
解决方案
我想这会做必要的 -
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<SublogTypeMapV> query = builder.createQuery(SublogTypeMapV.class);
Root<SublogTypeMapV> root = query.from(SublogTypeMapV.class);
query = query.select(root);
if("some boolean expression") {
query = query.where(builder.equal(root.get("responsibleGroupId"), responsibleGroupId));
}
同样,您可以处理内部的其他条件。
推荐阅读
- python-3.x - 是否有任何 linter 可以检测异步函数中的阻塞调用?
- perl - perl - 在偶数位置匹配并删除不可打印的字符
- xcode - 将我的 pod 迁移到 Swift 4.2 和 Xcode 10.2.1 时出错
- c# - 使用 C# 将文件保存在远程计算机的文件夹或共享文件夹中。远程机器在另一个域中
- swift - 如何像目录树一样向 NSOutlineView 上的节点添加更多节点?
- c++ - C++ 中从 StringStream 到 String 的额外字符
- reactjs - 如果我使用 axios 收到 404 错误,如何重定向?
- php - Laravel Cron Job 在 Windows 10 中只运行一次
- python - Django 2.2 无法连接到 AWS ElasticBeanstalk 上的 ElastiCache Redis
- cytoscape.js - 如何修复节点相对于屏幕的坐标?