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 。

@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,需要注入类

@Autowired

private SqlSessionTemplate sqlSession;

且配置

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

可以用一张图来表示这些关系和角色:

精彩文章来源微信公众号 java微技术

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();