-
功能:將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;