使用MyBatis进行“超级动态”查询

时间:2013-11-18 13:18:05

标签: java sql mybatis db2-400

有没有办法使用MyBatis动态创建SQL查询?要具体化:我有一个查询,其中部分内容(但不是参数)需要在运行时创建:

         with dummy (id) as (
           values (#{rangeEnd}) union all
           select id - 1 from dummy where id - 1 >= #{rangeStart}   
         ).......

第二部分可以用作参数,但是,当我尝试查询时,我得到一个例外:

[SQL0584] NULL or parameter marker in VALUES not allowed.

使用普通JDBC我使用MessageFormat

PreparedStatement ps = connection.prepareStatement(
            MessageFormat.format(MY_QUERY, currentRange.getRangeEnd()))

,但我还没有找到一种方法如何使用MyBatis。

2 个答案:

答案 0 :(得分:0)

这很简单(来自Dynamic Select SQL statements with MyBatis的答案):

with dummy (id) as (
           values (${rangeEnd}) union all
           select id - 1 from dummy where id - 1 >= #{rangeStart}   
         ).......

答案 1 :(得分:0)

使用@SelectProvider注释:

public interface SqlMapper {
    static class PureSqlProvider {
        public String sql(String sql) {
           // Create your query here
           return sql; 
        }
    }

    @SelectProvider(type = PureSqlProvider.class, method = "sql")
    public List<Dummy> select(String sql);
}