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>
<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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM