springDataJpa @Query注解多条件动态模糊分页查询,传入形参对象

在这里插入图片描述
1.代码:

    @Query(value = "SELECT * FROM s_order_baseinfo WHERE 1=1 " +
            "AND IF(''!=:#{#orderBaseInfo.siteId}, site_id=:#{#orderBaseInfo.siteId},1=1) " +
            "AND IF(''!=:#{#orderBaseInfo.userId}, user_id=:#{#orderBaseInfo.userId},1=1) " +
            "AND IF(''!=:#{#orderBaseInfo.orderNumber}, order_no like %:#{#orderBaseInfo.orderNumber},1=1) " +
            "AND IF(''!=:#{#orderBaseInfo.visitorCardNumber}, user_credentials_num=:#{#orderBaseInfo.visitorCardNumber},1=1) " +
            "AND IF(''!=:#{#orderBaseInfo.visitorPhone}, user_phone=:#{#orderBaseInfo.visitorPhone},1=1) " +
            "AND IF(''!=:#{#orderBaseInfo.orderState}, order_state=:#{#orderBaseInfo.orderState},1=1) " +
            "AND IF(''!=:#{#orderBaseInfo.queryConditionStartTime}, order_time>=:#{#orderBaseInfo.queryConditionStartTime},1=1) " +
            "AND IF(''!=:#{#orderBaseInfo.queryConditionEndTime}, order_time<=:#{#orderBaseInfo.queryConditionEndTime},1=1) " +
            "ORDER BY order_time DESC",
            countQuery = "SELECT current(*) FROM s_order_baseinfo WHERE 1=1 " +
                    "AND IF(''!=:#{#orderBaseInfo.siteId}, site_id=:#{#orderBaseInfo.siteId},1=1) " +
                    "AND IF(''!=:#{#orderBaseInfo.userId}, user_id=:#{#orderBaseInfo.userId},1=1) " +
                    "AND IF(''!=:#{#orderBaseInfo.orderNumber}, order_no like %:#{#orderBaseInfo.orderNumber},1=1) " +
                    "AND IF(''!=:#{#orderBaseInfo.visitorCardNumber}, user_credentials_num=:#{#orderBaseInfo.visitorCardNumber},1=1) " +
                    "AND IF(''!=:#{#orderBaseInfo.visitorPhone}, user_phone=:#{#orderBaseInfo.visitorPhone},1=1) " +
                    "AND IF(''!=:#{#orderBaseInfo.orderState}, order_state=:#{#orderBaseInfo.orderState},1=1) " +
                    "AND IF(''!=:#{#orderBaseInfo.queryConditionStartTime}, order_time>=:#{#orderBaseInfo.queryConditionStartTime},1=1) " +
                    "AND IF(''!=:#{#orderBaseInfo.queryConditionEndTime}, order_time<=:#{#orderBaseInfo.queryConditionEndTime},1=1) " +
                    "ORDER BY order_time DESC",
            nativeQuery = true)
    Page<OrderBaseInfo> getOrderBaseInfoPage(@Param("orderBaseInfo") OrderBaseInfo orderBaseInfo, Pageable pageable);

1.有几个疑问,有知道的大佬麻烦帮小弟解惑!

1). 听说用@Query注解的原生sql,会被二次转换成orm的实体类语法,不知道是不是这样.
2).#{#bean.xxx}
这里的为啥两个#
3). 语法中的冒号[’:’]和?一样的作用吗?包装类单属性形参的赋值方式为: select * from xxx where id=?1
是否可以这样赋值对象的属性呢? select * from xxx where id=?#{#对象.属性}
4).@Query的countQuery=的分页语句有没有简化的写法?两大坨,太臃肿了.
5.)官方api看着脑壳痛,有没有@Query的比较易读的详解文章推荐下啊.

是的,使用集合绑定时,处理器的形参名称需要使用@RequestParam 注解标注。这是因为 Spring MVC 框架在处理请求参数绑定时需要根据@RequestParam 注解所标注的参数名来确定对应的请求参数值。 例如,以下代码演示了如何在 Spring MVC 中使用集合形参进行数据绑定,并通过@RequestParam 注解指定参数名: ```java @RequestMapping("/save") public String save(@RequestParam("name") List<String> names, @RequestParam("age") List<Integer> ages) { // 处理数据 return "success"; } ``` 在上述代码中,通过 @RequestParam 注解分别指定了参数名为 name 和 age。当客户端提交请求时,框架会根据参数名从请求参数中获取对应的值,并将其绑定到对应的集合中。 需要注意的是,如果@RequestParam 注解中未指定参数名,则框架会默认使用形参名称作为参数名进行绑定。例如,以下代码演示了如何使用形参名称作为参数名进行数据绑定: ```java @RequestMapping("/save") public String save(List<String> name, List<Integer> age) { // 处理数据 return "success"; } ``` 在上述代码中,通过形参名称 name 和 age 来指定对应的集合形参。由于未使用@RequestParam 注解指定参数名,因此框架会默认使用形参名称作为参数名进行绑定。 总之,使用集合形参进行数据绑定时,需要使用@RequestParam 注解指定参数名或者使用形参名称作为参数名进行绑定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值