我們使用MyBatis(3.0.5)作爲我們的or-mapping工具(我沒有任何說法 - 所以!)。回滾ORMapper查詢
我創建了一個Response
對象,它通過MyBatis映射到我們的[responses]
數據庫表(我們使用PostgreSQL)。
事實上,我們使用ormapping結構如下:
- ResponseMapper.xml - 這哪裏是PSQL查詢定義並映射到ResponseMapper.java **類及其XML文件方法
- ReponseMapper.java - 用於一個接口 - 用於執行
- XML文件(上文)中所定義的查詢ResponseDAO.java使用MyBatis的一種接口DI的目的(我們使用彈簧)
- ResponseDAOImpl.java -
ResponseDAO
的具體實現,實際上調用ResponseMapper
方法;我們使用Spring來注入此類的實例爲我們的應用程序
因此,插入一個新的[responses]
記錄於PostgreSQL,代碼看起來像這樣從調用組件:
@Autowired
private ResponseDAO response;
public void doStuff()
{
int action = getAction();
response.setAction(action);
response.insert();
}
此設立工程爲我們精美。不過,我現在正在嘗試爲ResponseDAOImpl
類編寫一組JUnit測試,並且我想確保它正確地對我們的PostgreSQL數據庫執行查詢。
據我所知,沒有辦法「模擬」整個數據庫。所以我唯一的選擇(貌似)是讓測試方法執行一個查詢,檢查成功,然後無論如何回滾。
MyBatis似乎不支持這種回滾功能。我發現this在Old Nabble的郵件列表中發佈了mybatis-user
郵件列表,但海報使用的是Guice,他/她的問題似乎更多的是通過Guice回滾交易。
如果MyBatis的不支持交易/回滾(不是嗎?!?!),然後好像我唯一repireve是,如果PostgreSQL相關的JDBC驅動程序支持這些。我想我可以嘗試配置我的測試方法,以便它們運行ResponseDAO.insert()
方法,然後手動嘗試通過驅動程序直接回滾事務(無MyBatis)。
是否對此有任何經驗?代碼示例?提示?最佳實踐?提前致謝!
安迪,你可以看看雷米斯B的回答,以及我的後續評論嗎?該解決方案不起作用?如果我的測試方法首先從SqlSessionFactoryBean中獲取SqlSession,並且setAutoCommit(false),獲得一個Savepoint,執行查詢,然後回滾到Savepoint? Spring仍然會覆蓋這種行爲嗎?!? – IAmYourFaja 2011-12-20 21:08:48
你注射圖譜嗎?如果是這樣,我認爲Spring仍然會爲mapper調用打開一個新的SqlSession。我對Guice的東西非常熟悉,但是文檔[1]讓我認爲映射器運行自己的sql會話。 http://code.google.com/p/mybatis/downloads/detail?name=mybatis-spring-1.0.2-reference.pdf – Andy 2011-12-20 21:23:02