• 功能:将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用到的设计模式和常用类原理的更多相关文章

  1. 23种常用设计模式的UML类图

    23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整 ...

  2. 转载:23种常用设计模式的UML类图

    转载至:https://www.cnblogs.com/zytrue/p/8484806.html 23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源 ...

  3. java-API中的常用类,新特性之-泛型,高级For循环,可变参数

    API中的常用类 System类System类包含一些有用的类字段和方法.它不能被实例化.属性和方法都是静态的. out,标准输出,默认打印在控制台上.通过和PrintStream打印流中的方法组合构 ...

  4. 常用类枚举和DATE的介绍

    1 常用类 日期时间类 时间戳的内容:就是距离特定时间的时间间隔.,本质上也是一种整形(long). 例如:计算机时间戳就是距离历元(1970-01-01 00:00:00:000)的时间间隔. 世界 ...

  5. spring(二、bean生命周期、用到的设计模式、常用注解)

    spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...

  6. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  7. 常用类(日期时间格式转换,date,枚举)

    1 常用类 1.1 日期时间类 计算机如何表示时间? 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms ...

  8. python设计模式之常用创建模式总结(二)

    前言 设计模式的创建模式终极目标是如何使用最少量最少需要修改的代码,传递最少的参数,消耗系统最少的资源创建可用的类的实例对象. 系列文章 python设计模式之单例模式(一) python设计模式之常 ...

  9. Java基础常用类深度解析(包含常见排序算法)

    目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...

随机推荐

  1. [luoguP2618] 数字工程(DP)

    传送门 离线处理... 先线性筛一遍. 直接预处理出所有答案. 注意要用push,用乘法,常数小. #include <cstdio> #include <cstring> # ...

  2. windows下安装使用WGET

    windows下安装WGET   1. 安装wget    www.2cto.com   网址:http://gnuwin32.sourceforge.net/packages/wget.htm 下载 ...

  3. [NOIP2002] 提高组 洛谷P1034 矩形覆盖

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  4. ASP.NET程序开发中经典常用的三十三种代码实例[确实有用]

    原文发布时间为:2008-11-10 -- 来源于本人的百度文章 [由搬家工具导入] ASP.NET程序开发中经典常用的三十三种代码实例:1. 打开新的窗口并传送参数: 传送参数:response.w ...

  5. 1597: [Usaco2008 Mar]土地购买 [ dp+斜率优化 ] 未完

    传送门 1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1979  Solved: 705[Subm ...

  6. Object_C 定义全局宏的颜色时,报“Expected identifier”的错误

    在定义全局颜色宏的时候,为了整齐把空格删了,写在了同一行里,调用的时候,出错提示“Expected identifier”,如下: 如果宏定义如上那样的话,在调用的时候,会出现如下的问题: 百思不得解 ...

  7. 【APUE】用户态与内核态的区别

    当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态).此时处理器处于特权级最高的(0级)内核代码中 执行.当进程处于内核态时,执行的内核代码会使用当前进程 ...

  8. 【c++】C++中const用法总结

    1.      const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全 ...

  9. [转]Wireshark抓包工具--TCP数据包seq ack等解读

    原文: http://blog.csdn.net/wang7dao/article/details/16805337/ ---------------------------------------- ...

  10. Error Code: 2006 - MySQL 鏈嶅姟鍣ㄥ凡绂荤嚎

    将sql文件导入到mysql时候,就一直报这个错误. 我试过网上各种方法都行不通. 最后将以下一句运行了一下就能够了,并且没有重新启动mysql. SET GLOBAL max_allowed_pac ...