原生SQL组建查询

String sql = "SELECT gather.dwid,gather.dwname,recorditem.unit,record.id equiprecordid,record.equipname FROM eqm_equipgather_item gather LEFT JOIN eqm_equiprecord_item recorditem ON gather.equiprecorditemid =recorditem.id LEFT JOIN eqm_equiprecord record ON recorditem.equiprecordid =record.id WHERE record.equipmodelid = "
								+ equipmodelid + " AND gather.dwname LIKE '%" + displayconfig.getDisplayname()
								+ "%' AND gather.tenantid = " + tenantid + "";

						Query query = em.createNativeQuery(sql);
						query.unwrap(SQLQuery.class).addScalar("dwid", StandardBasicTypes.STRING)
								.addScalar("dwname", StandardBasicTypes.STRING)
								.addScalar("equiprecordid", StandardBasicTypes.LONG)
								.addScalar("unit", StandardBasicTypes.STRING)
								.addScalar("equipname", StandardBasicTypes.STRING)
								.setResultTransformer(Transformers.aliasToBean(EquipgatheritemVo.class));
						List<EquipgatheritemVo> gatherList = query.getResultList();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Specification 和原生 SQL 都可以用于复杂查询,但是它们的使用方式有所不同。 对于 Specification,您可以使用 CriteriaBuilder 和 Root 对象来构建查询条件。以下是一个使用 Specification 进行复杂查询的示例: ``` public Specification<User> getSpec(String name, int age) { return (root, query, cb) -> { List<Predicate> predicates = new ArrayList<>(); if (name != null && !name.isEmpty()) { predicates.add(cb.equal(root.get("name"), name)); } if (age > 0) { predicates.add(cb.greaterThanOrEqualTo(root.get("age"), age)); } return cb.and(predicates.toArray(new Predicate[0])); }; } public Page<User> getUsers(String name, int age, Pageable pageable) { Specification<User> spec = getSpec(name, age); return userRepository.findAll(spec, pageable); } ``` 在此示例中,我们使用 CriteriaBuilder 和 Root 对象构建了一个复杂的查询条件,然后将其传递给 findAll() 方法进行查询。 对于原生 SQL,您可以使用 JOIN、WHERE、GROUP BY、HAVING 和 ORDER BY 等 SQL 关键字来构建复杂查询。以下是一个使用原生 SQL 进行复杂查询的示例: ``` public List<User> getUsers(int id, String name, int age) { String sql = "SELECT u.* FROM user u "; List<Object> params = new ArrayList<>(); if (id > 0 || name != null || age > 0) { sql += "WHERE "; if (id > 0) { sql += "u.id = ? "; params.add(id); } if (name != null && !name.isEmpty()) { if (id > 0) { sql += "AND "; } sql += "u.name = ? "; params.add(name); } if (age > 0) { if (id > 0 || (name != null && !name.isEmpty())) { sql += "AND "; } sql += "u.age >= ? "; params.add(age); } } return jdbcTemplate.query(sql, params.toArray(), new BeanPropertyRowMapper<>(User.class)); } ``` 在此示例中,我们使用了 WHERE 子句来构建复杂查询条件,并使用了 jdbcTemplate 的 query() 方法来执行 SQL 查询。您可以根据需要更改 SQL 查询语句,并使用不同的查询方法来获取不同类型的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值