使用mybatis時,不使用mapper.class進行映射,而直接使用sqlsession提供的selectList執行mapper.xml中的陳述句:
SqlSession sqlSession = mySqlSessionFactory().openSession();
// statement為mapper.xml中一個select節點的唯一id
// paras是傳入sql中的map資料物件
List<Object> list = sqlSession.selectList(statement, paras);
return list;
最終執行的sql非常簡單
select * from sys_user su where su.usrid = 'sa'
這樣每次收到http請求后執行時都會創建一個sqlsession,但是每次執行的時間都在400ms左右,有時甚至要更長,同樣的陳述句放在plsql中執行只需要不到100毫秒。
如果使用ServiceImpl<M extends BaseMapper<T>, T>這種映射寫法時,第一次執行在1000毫秒左右,但是后邊的請求都不到100毫秒,與plsql執行的情況一致。
問題1 : 如何在使用 sqlSession.selectList時的查詢速度能與plsql表現一致?
嘗試過快取一個sqlsession的方式,確實會提升速度,但是mybatis官方檔案中明確不要將sqlsession放在靜態作用域中,必須是一個http請求創建一個sqlsession,所以這種辦法也不可行。
問題二:mapper映射關系這種寫法中mybatis是如何優化sqlsession的?
uj5u.com熱心網友回復:
sys_user表中的總資料量也不大,只有十條左右轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/139115.html
標籤:Java EE
上一篇:關于測驗如何提升測驗得深度
下一篇:java類的創建
