@Query(value = "SELECT sql_calc_found_rows * FROM ds_report_of_detaining_personnel u WHERE u.delete_status = 'N'" + "and IF (?2 != '', u.start_time between ?2 and ?3, 1=1) " + "and IF (?4 != '', u.isit_normal = ?4 , 1=1)" + "and (CASE WHEN length(u.register_branch_inner_code)=12 THEN left(u.register_branch_inner_code,8) WHEN length(u.register_branch_inner_code)=16 THEN left(u.register_branch_inner_code,12) ELSE'录入错误' END) in (?1) " + "and IF (?7 != '', u.daily_confirm = ?7 , 1=1) "+ "and IF (?8 != '', (u.to_back_detail = ?8 ) , 1=1) "+ "and IF (?9 != '', u.is_report_belatedly = ?9 , 1=1) "+ "order by u.start_time desc ," + "FIELD(u.region_name,'福建省','福州市','厦门市','漳州市','泉州市','三明市','莆田市','南平市','龙岩市','宁德市','平潭') limit ?5,?6 SELECT FOUND_ROWS()", nativeQuery = true) 怎么写才是对的
时间: 2023-12-29 09:05:25 浏览: 116
这似乎是一个使用原生 SQL 查询的 Spring Data JPA 查询语句。如果您想在同一个 `@Query` 注解里执行两个 SQL 查询(一个是查询数据,另一个是查询总行数),您可以像这样编写您的查询语句:
```java
@Query(value = "SELECT SQL_CALC_FOUND_ROWS * FROM ds_report_of_detaining_personnel u WHERE u.delete_status = 'N' " +
"AND IF (?2 != '', u.start_time BETWEEN ?2 AND ?3, 1=1) " +
"AND IF (?4 != '', u.isit_normal = ?4, 1=1) " +
"AND (CASE WHEN LENGTH(u.register_branch_inner_code) = 12 THEN LEFT(u.register_branch_inner_code, 8) " +
" WHEN LENGTH(u.register_branch_inner_code) = 16 THEN LEFT(u.register_branch_inner_code, 12) " +
" ELSE '录入错误' " +
" END) IN (?1) " +
"AND IF (?7 != '', u.daily_confirm = ?7, 1=1) " +
"AND IF (?8 != '', (u.to_back_detail = ?8), 1=1) " +
"AND IF (?9 != '', u.is_report_belatedly = ?9, 1=1) " +
"ORDER BY u.start_time DESC, FIELD(u.region_name, '福建省', '福州市', '厦门市', '漳州市', '泉州市', '三明市', '莆田市', '南平市', '龙岩市', '宁德市', '平潭') " +
"LIMIT ?5, ?6; " +
"SELECT FOUND_ROWS();", nativeQuery = true)
List<Object> findReportWithFoundRows(List<String> innerCodes, LocalDateTime startTime, LocalDateTime endTime,
String isitNormal, int offset, int limit, String dailyConfirm,
String toBackDetail, String isReportBelatedly);
```
这里的两个 SQL 查询语句之间使用了分号 `;` 分隔。在执行该查询语句后,您将获得一个包含两个元素的列表,第一个元素是您查询的数据,第二个元素是查询返回的总行数。
需要注意的是,您需要使用 `Object` 类型的列表来接收这两个元素,因为它们的类型不同。您还需要在查询方法的参数中传递所有需要使用的参数。
阅读全文