簡體   English   中英

MyBatis字符串替換$ {}與SelectProvider失敗

[英]MyBatis String substitution ${} fails with SelectProvider

我有一張桌子,上面有以下數據

ee2=> select * from emp;
 id |     name      
----+---------------
  1 | Hemant
  2 | Hem-Awesome
  3 | John A
  4 | John B
  5 | Hem-Awesome 2
  6 | Hem-Awesome 3
  7 | Hem-Awesome 4
(7 rows)

而對應的POJO為

public class Employee {
    private int id;
    private String name;    
    public int getId() {
        return id;
    }    
    public void setId(int id) {
        this.id = id;
    }    
    public String getName() {
        return name;
    }    
    public void setName(String name) {
        this.name = name;
    }
}

任務是找到名稱與給定模式匹配且id大於某個值的用戶

該查詢達到了預期的結果:

@Select("SELECT id, name from emp where name ilike '%${filter}%' and id > #{id}")
    public List<Employee> listEmpByName(@Param("filter")String filter, @Param("id") int id);

17:28:40.742 [main] DEBUG c.e.d.m.FeedbackMapper.listEmpByName - ooo Using Connection [org.postgresql.jdbc4.Jdbc4Connection@1e257dea]
17:28:40.753 [main] DEBUG c.e.d.m.FeedbackMapper.listEmpByName - ==>  Preparing: SELECT id, name from emp where name ilike '%hem%' and id > ? 
17:28:40.801 [main] DEBUG c.e.d.m.FeedbackMapper.listEmpByName - ==> Parameters: 2(Integer)
17:28:40.836 [main] DEBUG c.e.d.m.FeedbackMapper.listEmpByName - <==      Total: 3
[Employee [id=5, name=Hem-Awesome 2], Employee [id=6, name=Hem-Awesome 3], Employee [id=7, name=Hem-Awesome 4]]

但是,當我改用selectProvider時,字符串替換失敗。

@SelectProvider(type = com.hem.MapperSQLBuilder.class, method = "listEmpByNameProvider")
    public List<Employee> listEmpByNameProvider(@Param("filter")String filter, @Param("id") int id);

選擇提供程序中的方法如下:

public String listEmpByNameProvider(Map<String, Object> parameters) {
        System.out.println(parameters);
        return "SELECT id, name from emp where name ilike '%${filter}%' and id > #{id}";
    }

但是使用selectProvider時,參數替換可以正常工作(#{}),而字符串替換($ {})

17:35:40.146 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Opening JDBC Connection
17:35:40.202 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [org.postgresql.jdbc4.Jdbc4Connection@7c6daa]
17:35:40.204 [main] DEBUG c.e.d.m.F.listEmpByNameProvider - ooo Using Connection [org.postgresql.jdbc4.Jdbc4Connection@7c6daa]
17:35:40.215 [main] DEBUG c.e.d.m.F.listEmpByNameProvider - ==>  Preparing: SELECT id, name from emp where name ilike '%${filter}%' and id > ? 
17:35:40.293 [main] DEBUG c.e.d.m.F.listEmpByNameProvider - ==> Parameters: 2(Integer)
17:35:40.338 [main] DEBUG c.e.d.m.F.listEmpByNameProvider - <==      Total: 0
[]

有人會把豆灑出來,為什么會這樣?

連接值,如下所示:

SELECT id, name from emp where name like '%"+${filter}+"%' and id > #{id}.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM