2016-09-19 53 views
2

我們有一個要求,我們應該能夠更改我們在運行時使用mybatis運行的,沒有重新部署的sql。我查看了網上的答案,但沒有任何東西。我可以在不重新部署的情況下更改Mybatis中的sql查詢嗎?

我不是指動態sql功能,我們可以根據某些條件添加/刪除子句。我應該能夠完全改變SQL。

我們可以從DB或對象獲取映射器sql,而不是config xml中提到的映射器xml。如果可以這樣做,我們可以通過使用一些REST調用來更新數據庫或對象,並且運行的下一個sql會提取新的sql。如果需要,我會緩存數據庫sql,這可以提高性能。

可能嗎?我們可以做這樣的事嗎?如果在mybatis中不可行,是否還有其他框架可以支持它?

回答

1

如果您使用Java Api,則可以使用sql提供程序,只需將@SelectProvider或其他@ ...提供程序註釋添加到您的映射程序接口方法並創建這些提供程序,即可從任意位置獲取SQL查詢。 事情是這樣的:

@SelectProvider(type = EntitySqlProvider.class, method = "buildSelectQuery") 
List<T> find(); 

Provider類並不需要實現或繼承任何東西。你只需創建一個返回字符串的方法。 但是,好了,這不符合XML配置工作

0

mybatis-config.xml我們通常配置映射位置如下:

<mappers> 
    <mapper resource="CategoryMapper.xml"/>  
</mappers> 

我們可以存儲映射器中的文件系統,並將其配置如下:

<mappers> 
    <mapper url="file:///D:/CategoryMapper.xml"/> 
</mappers> 

但我認爲MyBatis會讀取這些映射器一次,並準備好對象模型並對其進行緩存。所以,我不認爲它會再次讀取這些映射器文件,即使我們在文件系統上更新它們。

相關問題