Mybatis常用类原理
Posted dream_sky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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常用类原理的主要内容,如果未能解决你的问题,请参考以下文章