springboot @query自定义查询 动态条件

qq_21985711 2018-05-23 03:36:11
我有一个name条件 name不为空时执行 @Query("select * from a where 1=1 and name=?1",nativeQuery=true) 空时只执行select * from a where 1=1
怎么做,试了很多种方法都不行
...全文
2313 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahabuhuijava 2020-09-03
  • 打赏
  • 举报
回复
引用 12 楼 偶尔想起你 的回复:
您好,你的sql语句可以这样写:

@Query(value=“ select * from a where name =?1 or -1=?1”,nativeQuery = true)

这样写就行了,让前端查询的时候,如果按照name查询,就传具体name的值,如果查询全部,就给你传 '-1' 即可! 我们的项目中一直就是这样写的. 你的sql语句肯定是不行的,数据库有个最左匹配原则,所以按照你的sql执行逻辑来看永远查的都是全部数据.


非常感谢解决了我的问题
偶尔想起你 2020-04-20
  • 打赏
  • 举报
回复
您好,你的sql语句可以这样写: @Query(value=“ select * from a where name =?1 or -1=?1”,nativeQuery = true) 这样写就行了,让前端查询的时候,如果按照name查询,就传具体name的值,如果查询全部,就给你传 '-1' 即可! 我们的项目中一直就是这样写的. 你的sql语句肯定是不行的,数据库有个最左匹配原则,所以按照你的sql执行逻辑来看永远查的都是全部数据.
qq_14961401 2019-06-05
  • 打赏
  • 举报
回复
@Query(value = "select bill.id_ as id, bill.created_date as date, bill.no, lawyer_case .case_no as caseNo, " + "lawyer_case .case_name as caseName, customer.no as customerNo, customer.cn_name as customerName, " + "bill.total_expense_after_tax, bill.collected_money, bill.book_ticket_amount, bill.version " + "e1.name as creator, bill.status" + "from bill " + "left join lawyer_case on lawyer_case .case_no=bill.case_no " + "left join customer on customer.no=bill.customer_no " + "left join employee e1 on e1.id_=bill.creator " + "where IF (?1!='', customer_no=?1, 1=1) " + "and IF (?2!='', case_no=?2, 1=1) " + "and IF (?3!='', status=?3, 1=1) " + "and IF (?4!='', creator'%',?4,'%')), 1=1) " + "and create_by=?5 " + "ORDER BY ?#{#pageable} ", countQuery = "select count(*) " + "from bill " + "left join lawyer_case on lawyer_case .case_no=bill.case_no " + "left join customer on customer.no=bill.customer_no " + "left join employee e1 on e1.id_=bill.creator " + "where IF (?1!='', customer_no=?1, 1=1) " + "and IF (?2!='', case_no=?2, 1=1) " + "and IF (?3!='', status=?3, 1=1) " + "and IF (?4!='', creator'%',?4,'%')), 1=1) " + "and create_by=?5 "+ "ORDER BY ?#{#pageable} ", nativeQuery = true) Page<Object[]> findAllBill(String customerNo, String caseNo, Integer status, String creator, String createBy, Pageable pageable); 试一下这样写
weixin_41178432 2019-01-03
  • 打赏
  • 举报
回复
我也有相同的问题,找到啥好方法了,能分享一下吗?
衡芜君丶 2019-01-01
  • 打赏
  • 举报
回复
引用 5 楼 qq_21985711 的回复:
引用 4 楼 sinat_37774909 的回复:
[quote=引用 3 楼 qq_21985711 的回复:]
[quote=引用 2 楼 sinat_37774909 的回复:]
用@query是不好实现的,而且你这写的不通用,用jap的getBaseDao().findAll(getSpecification(spec));这个方法,拼接条件可以实现
,这个sql比较复杂关联了5张表还有子查询,用jpa的方式实现不了,用自定义的好写一些

jpa的findall的getSpecification方法用public Predicate toPredicate(Root<StudentInfo> root,
CriteriaQuery<?> query, CriteriaBuilder cb)拼接条件,就可以用代码控制了[/quote]我找到方法了,谢谢[/quote]

找到什么方法呢?我正好也碰到这个问题
qq_21985711 2018-05-24
  • 打赏
  • 举报
回复
引用 4 楼 sinat_37774909 的回复:
引用 3 楼 qq_21985711 的回复:
[quote=引用 2 楼 sinat_37774909 的回复:] 用@query是不好实现的,而且你这写的不通用,用jap的getBaseDao().findAll(getSpecification(spec));这个方法,拼接条件可以实现
,这个sql比较复杂关联了5张表还有子查询,用jpa的方式实现不了,用自定义的好写一些
jpa的findall的getSpecification方法用public Predicate toPredicate(Root<StudentInfo> root, CriteriaQuery<?> query, CriteriaBuilder cb)拼接条件,就可以用代码控制了[/quote]我找到方法了,谢谢
竹子_bamboo 2018-05-23
  • 打赏
  • 举报
回复
引用 3 楼 qq_21985711 的回复:
引用 2 楼 sinat_37774909 的回复:
用@query是不好实现的,而且你这写的不通用,用jap的getBaseDao().findAll(getSpecification(spec));这个方法,拼接条件可以实现
,这个sql比较复杂关联了5张表还有子查询,用jpa的方式实现不了,用自定义的好写一些
jpa的findall的getSpecification方法用public Predicate toPredicate(Root<StudentInfo> root, CriteriaQuery<?> query, CriteriaBuilder cb)拼接条件,就可以用代码控制了
qq_21985711 2018-05-23
  • 打赏
  • 举报
回复
引用 2 楼 sinat_37774909 的回复:
用@query是不好实现的,而且你这写的不通用,用jap的getBaseDao().findAll(getSpecification(spec));这个方法,拼接条件可以实现
,这个sql比较复杂关联了5张表还有子查询,用jpa的方式实现不了,用自定义的好写一些
竹子_bamboo 2018-05-23
  • 打赏
  • 举报
回复
用@query是不好实现的,而且你这写的不通用,用jap的getBaseDao().findAll(getSpecification(spec));这个方法,拼接条件可以实现
竹子_bamboo 2018-05-23
  • 打赏
  • 举报
回复
这个spring boot和sping data jpa 有啥关系额,我用的jpa,看你这风格跟我的一样额
PowerBI系列之Power Query专题1.  获取数据 数据源种类介绍和获取Excel数据源输入数据和拷贝数据:创建辅助表解析Json/XML数据格式获取Web网页数据和URL添加动态参数连接数据的四种模式:Import、DirectQuery、Live Connection、Dual双 属于混合模式连接数据库:Sql server、 Mysql(直连但是必须先安装一个mysql插件)DirectQuery直连查询:Sql serverODBC方式获取数据表关联或多个Sql或调用存储过程获取数据SQL中动态传参和自定义函数: sql中使用参数或数据库名称使用参数连接Sharepoint和OneDrive数据源连接Dataset和Dataflow 替换本地数据源为Sharepoint数据源并保留数据处理操作 终止当前数据刷新Loading:Cancel Query数据源设置-重置数据连接凭证PBIDS连接数据源创建和使用报表模块(输入或值列表)利用报表模板和参数控制线下报表数据权限DirectQuery启用自动页面刷新和更改检测管理聚合表提高DirectQuery查询性能动态M查询参数提高DirectQuery查询性能添加数据刷新时间 DateTime.LocalNow()和Getdate()2.  数据清洗和M语言M语言和官方文档介绍PowerQuery中查阅M函数:=#shared, Ctrl+Space提示数据清洗之常用技能:提升标题、更改数据类型、保留删除错误或空行,删除重复项、选择列和删除列、填充单元格、合并列、拆分、提取、替换、条件替换、添加自定义列,添加条件列、添加索引列、分组、添加年月日列、追加和合并查询透视和逆透视以及转置合并单元格的Excel文件处理导入文件夹中多Excel文件并合并解决多文件合并中列顺序不一致使用参数和函数批量导入文件 文本中提取中文、英文、数字等处理双引号转义 列拆分详解解决列名改变错误解决列丢失错误动态显示、排序和重命名列为所有列名添加前缀列名字母大写和分隔符调整Trim标题列中的多余空格如何处理load数据错误为什么load的Excel数据有null空行为什么load的Excel数据标题在第二行灵活添加占位符规范同类相似数据数据按多列排序为分组添加Index序号分组内值合并诊断工具分析数据处理过程PowerQuery小技巧分享 新冠病例活动轨迹地图标识 

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧