使用UseStringTemplate3StatementLocator不再从文件加载SQL文件

时间:2017-10-11 00:15:25

标签: java jdbi

我将所有广告单独保存在单独的.sql中并使用@SqlQuery("db/my-dao/fetch-my-dao.sql")

一切正常,但是一旦我将UseStringTemplate3StatementLocator添加到Dao界面,它就再也找不到该文件了,我只是得到一个语法错误,说字符串" db / my-dao /fetch-my-dao.sql"不是有效的查询。

我怎样才能让两者兼顾?

1 个答案:

答案 0 :(得分:1)

这里发生了几件事。

jdbi v2使用UseStringTemplate3StatementLocator从类路径上的StringTemplate(v3)组文件中加载SQL。

例如,如果您有一个AccountDao文件,例如:

package com.foo;

public interface AccountDao {

    @SqlQuery
    @UseStringTemplate3StatementLocator
    List<Account> selectAll();
}

在此示例中,由于完全限定的类名是com.foo.AccountDao,因此将从类路径上的文件com/foo/AccountDao.sql.stg加载SQL。注意* .sql.stg部分。由于我们正在使用UseStringTemplate3StatementLocator,因此必须在相同的类路径中创建* .sql.stg文件。例如:com/foo/AccountDao.sql.stg

group AccountDao;

selectAll() ::= <<
    your query goes here
>>