Mybatis常用類原理
-
功能:將java對象映射城sql語句,將結果集轉化成java對象。將容易變化的放在配置文件中,不變的通過Mybatis管理。
-
完成:1.根據JDBC規範建立數據庫的連接;
2.通過反射打通java對象與數據庫參數轉化的關系。
-
原理:動態代理和反射機制。
動態代理中用到JDK動態代理和CGLIB代理。
這兩者的區別是,JDK動態代理是接口的,CGLIB代理是對於類的。
Mybatis中這兩種代理都用到過,Mapper中用到的是JDK動態代理,在延遲加載的時候用到CGLIB代理。
1.讀取配置到Configuration對象,並使用相應對象去創建SqlSessionFactory;
2.通過SqlSessionFactory拿到SqlSession進行增刪改查方法。
SqlSessionDaoSupport:
1、SqlSessionDaoSupport 是 一 個 抽象 的支 持 類, 用來 為你 提供 SqlSession 。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@Autowired
@Override
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
// TODO Auto-generated method stub
super .setSqlSessionFactory(sqlSessionFactory);
}
//spring配置
<!-- 配置sqlSessionFactory -->
<bean id= "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" >
<property name= "dataSource" ref= "dataSource" />
<property name= "configLocation" value= "classpath:mybatis.cfg.xml" ></property>
</bean>
|
2、調 用 getSqlSession()方法你會得到一個 SqlSessionTemplate,之後可以用於執行 SQL 方法
3、持久層未繼承SqlSessionDaoSupport,需要註入類
1 2 |
@Autowired
private SqlSessionTemplate sqlSession;
|
且配置
1 2 3 |
<bean id= "sqlSessionTemplate" class = "org.mybatis.spring.SqlSessionTemplate" >
<constructor-arg index= "0" ref= "sqlSessionFactory" />
</bean>
|
涉及涉及模式:
Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;
工廠模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
單例模式,例如ErrorContext和LogFactory;
代理模式,Mybatis實現的核心,比如MapperProxy、ConnectionLogger,用的jdk的動態代理;還有executor.loader包使用了cglib或者javassist達到延遲加載的效果;
組合模式,例如SqlNode和各個子類ChooseSqlNode等;
模板方法模式,例如BaseExecutor和SimpleExecutor,還有BaseTypeHandler和所有的子類例如IntegerTypeHandler;
適配器模式,例如Log的Mybatis接口和它對jdbc、log4j等各種日誌框架的適配實現;
裝飾者模式,例如Cache包中的cache.decorators子包中等各個裝飾者的實現;
叠代器模式,例如叠代器模式PropertyTokenizer;
Mybatis常用類原理