1. 程式人生 > >Mybatis常用類原理

Mybatis常用類原理

emp actor 變化 建立數據庫 nbsp 對象 table template HA

  • 功能:將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>
<wiz_tmp_tag class="wiz-block-scroll">

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常用類原理