美文网首页
spring jpa 动态查询

spring jpa 动态查询

作者: allblux | 来源:发表于2017-02-23 16:20 被阅读0次

    在业务中需要动态查询,多方查询之后感觉还可以.简单的动态查询

    代码如下

     override fun findAll(map: Map<String, Any>, pageable: Pageable): Page<SnEntity> {
            var mySpec: Specification<SnEntity> = Specification { root: Root<SnEntity>, criteriaQuery, criteriaBuilder ->
                var exp1: Path<String>? = root.get("no")
                var exp2: Path<String>? = root.get("createBy")
                var exp3: Path<Int>? = root.get("status")
                var type = map["type"]
                var status = map["status"]
                var predicate: Predicate = criteriaBuilder.conjunction()
                if ((status as String).isNotBlank()) {
                    predicate.expressions.add(criteriaBuilder.equal(exp3, status))
                }
                if ((type as String).isNotBlank()) {
                    predicate.expressions.add(criteriaBuilder.or(criteriaBuilder.like(exp1, "%$type%"),
                            criteriaBuilder.like(exp2, "%$type%")))
                }
                predicate
            }
            return snRepository.findAll(mySpec, pageable)
        }
    

    mysql 的find_in_set也是很好用
    在使用find_in_set的时候 jpa好像是并不支持这样搜索。
    所以决定用原生sql,此时产生一个问题。之前传一个pageable参数进去后,jpa就会自动分页排序,最后在stackoverflow上找到一个解决方法
    原文地址

     @Query(value = "select * from user_invest  where find_in_set(?1,investField)>0 and institution like %?2% ORDER BY ?#{#pageable}",
                countQuery = "select count(*) from user_invest  where find_in_set(?1,investField)>0 and institution like %?2%  ",
                nativeQuery = true)
        fun  findByFieldAndKeyword(filed: Int, keyword: String, pageable: Pageable): Page<InvestEntity>
    

    记录一下,日后参考

    相关文章

      网友评论

          本文标题:spring jpa 动态查询

          本文链接:https://www.haomeiwen.com/subject/ajebwttx.html