mybatis(1)---概述

1、mybatis历史

1)MyBatis 是 Apache 的一个开源项目 iBatis, 2010 年 6 月这个项目由 Apache Software Foundation 迁移到了 Google Code,随着开发团队转投 Google Code 旗下, iBatis3.x 正式更名为 MyBatis ,代码于 2013 年 11 月迁移到 Github

2)iBatis 一词来源于“internet”和“abatis”的组合,是一个基于 Java 的持久层框架。 iBatis 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)

2、什么是mybatis?

1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架

2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

3、为什么要使用mybatis?

1)、使用JDBC

SQL语句卸载java代码块中,耦合度高,存在硬编码。

使用JDBC维护难且实际开发需求中sql是有变化的,频繁修改的情况常见

2)、使用Hibernate和JPA

hibernate是全自动映射框架,大量字段的pojo进行部分映射时比较困难,导致数据库性能下降。

优点是:写代码少,开发速度快。

3)、mybatis

对于开发人员而言,核心sql还是需要自己优化

sql语句和java编码分离,功能边界清晰,一个专注数据,一个专注业务,各司其职,互不干扰。

它的缺点就是整个底层数据库查询都需要自己编写,工作量比较大,

4、如何下载mybatis?

1) 下载网址 https://github.com/mybatis/mybatis-3/

5、mybatis工作流程

第1步、通过SqlSessionFactoryBuilder创建SqlSessionFactory对象

在SqlSessionFactoryBuilder的build()方法中可以看到Mybatis内部定义了一个类XMLConfigBuilder,它是用来解析配置文件mybatis-config.xml的,针对配置文件中的每一个节点进行解析,并将数据存放到configuration这个对象中,紧接着使用带有Configuration的构造方法返回一个DefaultSqlSessionFactory

第2步、通过SqlSessionFactory创建SqlSession对象

第3步、通过SqlSession拿到Mapper代理对象

第4步、通过MapperProxy调用Mapper中增删改查的方法

6、mybatis的核心类

Mybatis底层封装了JDBC,使用了动态代理模式。

 1)、SqlSessionFactoryBuilder (构造器):使用Builder模式根据mybatis-config.xml配置或者代码来生成SqISessionFactory。

 2)、SqlSessionFactory (工厂接口):使用工厂模式生成SqlSession。

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或通过Java的方式构建出 SqlSessionFactory 的实例。SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,建议使用单例模式或者静态单例模式。一个SqlSessionFactory对应配置文件中的一个环境(environment),如果你要使用多个数据库就配置多个环境分别对应一个SqlSessionFactory。
 

 3)、SqlSession (会话): 一个既可以发送 SQL 执行返回结果,也可以获取Mapper的接口。

SqlSession是一个接口,它有2个实现类,分别是DefaultSqlSession(默认使用)以及SqlSessionManager。SqlSession通过内部存放的执行器(Executor)来对数据进行CRUD。此外SqlSession不是线程安全的,因为每一次操作完数据库后都要调用close对其进行关闭,官方建议通过try-finally来保证总是关闭SqlSession
 

 4)、SQL Mapper (映射器): 它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果。

 5)、Executor(执行器): Executor接口有两个实现类,其中BaseExecutor有三个继承类分别是

BatchExecutor(重用语句并执行批量更新)

ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement)SimpleExecutor(默认,每次都会创建新的statement)。

以上三个就是主要的Executor,通过下图可以看到Mybatis在Executor的设计上面使用了装饰器模式,我们可以用CachingExecutor来装饰前面的三个执行器目的就是用来实现缓存
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值