日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis关键配置-接口注入使用

發布時間:2024/4/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis关键配置-接口注入使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們使用Mapper 的時候,只需要在加了Service 注解的類里面使用@Autowired注入Mapper 接口就好了。

@Service public class EmployeeService {@AutowiredEmployeeMapper employeeMapper;public List<Employee> getAll() {return employeeMapper.selectByMap(null);} }

Spring 在啟動的時候需要去實例化EmployeeService。

EmployeeService 依賴了EmployeeMapper 接口(是EmployeeService 的一個屬性)。

Spring 會根據Mapper 的名字從BeanFactory 中獲取它的BeanDefination,再從BeanDefination 中獲取BeanClass , EmployeeMapper 對應的BeanClass 是MapperFactoryBean(上一步已經分析過)。

接下來就是創建MapperFactoryBean,因為實現了FactoryBean 接口,同樣是調用getObject()方法。

// MapperFactoryBean.java public T getObject() throws Exception {return getSqlSession().getMapper(this.mapperInterface); }

因為MapperFactoryBean 繼承了SqlSessionDaoSupport , 所以這個getSqlSession()就是調用父類的方法,返回SqlSessionTemplate。

// SqlSessionDaoSupport.java public SqlSession getSqlSession() {return this.sqlSessionTemplate; }

第二步,SqlSessionTemplate 的getMapper()方法,里面又有兩個方法:

// SqlSessionTemplate.java public <T> T getMapper(Class<T> type) {return getConfiguration().getMapper(type, this); }

第一步:SqlSessionTemplate 的getConfiguration()方法:

// SqlSessionTemplate.java public Configuration getConfiguration() {return this.sqlSessionFactory.getConfiguration(); }

進入方法,通過DefaultSqlSessionFactory,返回全部配置Configuration:

// DefaultSqlSessionFactory.java public Configuration getConfiguration() {return configuration; }

第二步:Configuration 的getMapper()方法:

// Configuration.java public <T> T getMapper(Class<T> type, SqlSession sqlSession) {return mapperRegistry.getMapper(type, sqlSession); }

這一步我們很熟悉, 跟編程式使用里面的getMapper 一樣, 通過工廠類MapperProxyFactory 獲得一個MapperProxy 代理對象。

也就是說,我們注入到Service 層的接口,實際上還是一個MapperProxy 代理對象。所以最后調用Mapper 接口的方法,也是執行MapperProxy 的invoke()方法,后面的流程就跟編程式的工程里面一模一樣了。

總結:

對象生命周期
SqlSessionTemplateSpring 中SqlSession 的替代品,是線程安全的,通過代理的方式調用
DefaultSqlSession 的方法
SqlSessionInterceptor(內部類)代理對象,用來代理DefaultSqlSession,在SqlSessionTemplate 中使用
SqlSessionDaoSupport用于獲取SqlSessionTemplate,只要繼承它即可
MapperFactoryBean注冊到IOC 容器中替換接口類,繼承了SqlSessionDaoSupport 用來獲取
SqlSessionTemplate,因為注入接口的時候,就會調用它的getObject()方法
SqlSessionHolder控制SqlSession 和事務

思考:@MapperScan 注解是怎么解析的?

?

總結

以上是生活随笔為你收集整理的MyBatis关键配置-接口注入使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。