动态参数为String类型时如何删除''?

时间:2019-01-02 13:15:30

标签: java spring-data-jpa

我想使用jpa @Query,发现类型String的参数将在sql语句中自动括在单引号('')中。由于它是一个子查询,因此将导致SQL错误:

@Query(value="select cate_id,dt,channel,game_id,new_income_money,new_account,consume from ? " +
        " where cate_id=? and dt between ? and ?" ,nativeQuery = true)
List<TfData> findTfRangeData(String subsql, Integer cate_id, String start_dt, String end_dt);

我该怎么做才能防止这种行为?

2 个答案:

答案 0 :(得分:1)

此功能旨在防止SQL injection攻击-它不是通过串联攻击者可以利用的原始文本,而是使用参数化查询以安全的方式添加参数。

不幸的是,您实际上是在尝试使用 SQL注入来实现所需的功能。您应该考虑进行更改,而不是构建包含动态查询的String,而应使用某种DSL库。

Spring-Data-JPA支持执行此操作的几种方法,包括CriteriaSpecificationsQueryDSL

This post简要介绍了如何使用它们。

答案 1 :(得分:-1)

我尝试了两种方法来解决我的问题。 首先,使用JDBC。 其次,集成mybatis框架。将依赖项添加到pom.xml并编写一个映射器来实现我的需求。springboot项目非常简单。 use JDBC dependency and mapper the mapper