Dao層繼承了SqlSessionDaoSupport,該類會自動注入SQLSessionFectory,我們只要使用this.getSqlSession()就可以拿到SqlSession。
但是如果使用的是"mybatis-spring-1.0.0-RC3.jar"這個版本是沒有問題的。但是高版本就會有問題,原因是Mybatis3依賴的jar包"mybatis-spring-1.2.0.jar"這個版本以及以上的版本中,對SqlSessionDaoSupport類中的'sqlSessionFactory'或'sqlSessionTemplate'注入方式進行了調整。
可能是爲了解決多數據源的問題吧,取消了自動注入。
解決辦法:創建一個Dao的基類CommonDao,讓這個基類繼承SqlSessionDaoSupport,並通過set方法注入SqlSessionFactory屬性即可:
/** * Created by SYJ on 2017/4/16. */ public class CommonDao extends SqlSessionDaoSupport { @Resource public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){ super.setSqlSessionFactory(sqlSessionFactory); } }
然後讓Dao實現類再繼承這個CommonDao基類即可:
@Repository public class PersonDaoImpl extends CommonDao implements PersonDao { //此處省略... }
重新啓動web項目,問題解決。