当前位置: 首页 > 知识库问答 >
问题:

mybatis注释选择带有参数的查询,该参数在条件中多次使用

林鸿飞
2023-03-14

我有一个问题与mybatis注释查询以下错误。

组织。阿帕奇。伊巴蒂斯。结合BindingException:未找到参数“strDateStart”。可用参数为[0,1,param1,param2]

下面是mapper类中的代码。


    `@Select("SELECT * FROM Result WHERE"AND proc_date >= '#{strDateStart}'"+
    "AND proc_date >= '#{strDateEnd}'"+
    "AND update_date <= '#{strDateStart}'"+
    "AND update_date <= '#{strDateEnd}'")
    public ArrayList<ResultDao> select(String strDateStart,String strDateEnd);`

与query中的参数和method中的args使用相同的名称,我可以在具有相同参数的条件中多次使用吗?

共有3个答案

邴俊友
2023-03-14

我使用@SelectProvider设置参数映射,这对我来说很有用:

映射器类:

@SelectProvider(type = MyBatisSqlProvider.class, method = "getSqlString")
    public List<Map<String, Object>> select(@Param("sql") String sqlString, @Param("sqlParams") Map<String, Object> sqlParams);

提供程序类:

    String sqlString = (String) params.get(SQL_PATH);
        Map<String, Object> sqlParams = (Map<String, Object>) params.get(SQL_PARAM);

        if (sqlParams != null) {
            params.putAll(sqlParams);
        }
return sqlString;

我的桌子:

create table TBLSAMPLE (id int primary key auto_increment, name varchar,  name1 varchar);
insert into TBLSAMPLE (name,name1) values ('test','test');
insert into TBLSAMPLE (name,name1) values ('test','test');
insert into TBLSAMPLE (name,name1) values ('test','test');
insert into TBLSAMPLE (name,name1) values ('test','test');
insert into TBLSAMPLE (name,name1) values ('qa','test');

并使用sql进行测试:从TBLSAMPLE中选择*,其中name=#{name}和name1=#{name}

林夕
2023-03-14

你试过这个吗?

@Select(“从结果中选择*”和过程日期

国盛
2023-03-14

这个问题通过
1解决了。删除变量#{strDateXXXX}
2周围的单引号。为该条件创建一个类,如下代码所示。


    `public class SelectConditions {
    String strDateStart;
    String strDateEnd;
    public String getStrDateStart() {
        return strDateStart;
    }
    public void setStrDateStart(String strDateStart) {
        this.strDateStart = strDateStart;
    }
    public String getStrDateEnd() {
        return strDateEnd;
    }
    public void setStrDateEnd(String strDateEnd) {
        this.strDateEnd = strDateEnd;
    }
    public SelectConditions(String strDateStart, String strDateEnd) {
        this.strDateStart = strDateStart;
        this.strDateEnd = strDateEnd;
    }`


3.通过传递条件类来更改映射器类


    `@Select("SELECT * FROM Result WHERE"AND proc_date >= #{strDateStart}"+
        "AND proc_date >= #{strDateEnd}"+
        "AND update_date <= #{strDateStart}"+
        "AND update_date <= #{strDateEnd}")
    public ArrayList select(SelectConditions conditions)`
 类似资料:
  • 我试图使用jpa组件来选择从标题中获取的id。我在文档中找到了一个使用本机select查询的示例: 我试图用${header.id}替换“1”常量: 这似乎不管用,我明白了: 也许还有别的方法可以让它发挥作用?

  • 这是我的映射器 我拥有的firmDBName是从我的“主数据库”中获得的。 > 如果我在第二个查询中省略了${firmDBName},则该查询试图访问我的主数据库,并抛出表“primarydb.frm_dealer_type”未找到。因此,它基本上是试图在我的主数据库中搜索一个名为“frm_dealer_type”的表。 如果我尝试重写@result null 我想要一个解决方案来将我的参数fir

  • 我想通过JDBC向Oracle DB发送一个准备好的语句SQL查询,如下所示: 只有在我提供3次时才起作用,但我不想这样做,我更希望调整准备好的语句的SQL,以便只使用一个但将其应用于所有条件。类似于 但这种尝试似乎并不奏效。有没有办法在SQL字符串中多次使用一个准备好的语句参数? 在@selvin的善意建议之后,我为准备好的语句使用了以下SQL字符串: 然后,我得到错误“ORA-06550:第1

  • 问题内容: 使用Hibernate时,有什么方法可以在命名查询中指定可选参数(例如,从表单提供搜索参数而并非所有参数都是必需的)?我正在使用本机SQL查询,但该问题可能也适用于命名HQL查询。 我很确定对此的答案是“否”,但是我还没有在文档中找到确切的答案。 问题答案: AFAIK,没有这样的事情,因此您必须为此编写一个动态查询。也许看一下以前的答案,该答案显示了如何在HQL中执行此操作(您可以将

  • 我有一个本机查询要在Spring的@Query注释中使用。问题是我无法为LIMIT AND INTERVAL等非标准子句传递参数。 1) 是否可以在注释中传递限制参数。2) JPA中的程序等价物是什么。它有可以使用的查询接口吗? 此外,不会为每个查询更改limit和interval子句,但应该在jvm启动时设置。

  • 在下面的代码中,我有时会将设置为null。此时,它抛出错误为“could not extract resultset;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammarexception:could not extract resultset” 即使为空,我如何获取数据。总有一天约会就要来了。这是怎么做的? null