一、什么是MyBatis?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。

MyBatis 通过XML 或注解的方式将要执行的各种Statement配置起来,并通过java对象和Statement中sql的动态参数进行映射生成最终执行的sql语句,最后由MyBatis框架执行SQL并将结果映射为Java对象然后返回。

MyBatis 和Hibernate的异同点:

同:

采用ORM思想解决了实体和数据库映射的问题,两者都对JDBC进行了封装,屏蔽了JDBC API底层访问细节,使我们不用与JDBC API打交道,就可以完成对数据库的持久化操作。

异:

MyBatis相较Hibernate更易掌握,即学即用,SQL编写更简明易懂,当然功能也相对简陋一些,Hibernate则功能完全一些,掌握起来也相对需要些难度。

Hibernate是全自动化ORM的映射工具,而MyBatis是半自动化ORM映射工具,这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的全自动化ORM实现而言,全自动ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

MyBatis和Hibernate在开发速度、SQL 优化、对象管理、缓存等方面有或多或少的差异,详细区别可参考下面这个博文:

http://www.cnblogs.com/inspurhaitian/p/4647485.html

二、MyBatis核心组件

MyBatis核心组件包括四个部分

1. SqlSessionFactoryBuilder(构造器). 它会根据代码或者配置来生成SqlSessionFactory,采用的是分布构建的builder模式。

2. SqlSessionFactory(工厂接口).  它可以生成SqlSession,采用的是工厂模式。

3. SqlSession(会话). 它可以发送SQL语句返回结果,也可以获取Mapper接口。

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

介绍:

1. SqlSessionFactoryBuilder(构造器)

SqlSessionFactoryBuilder类负责构建SqlSessionFactory,该类重载了多个build方法,如下图所示,目的是使用起来方便,其实这些方法归结起来也就三类,分别是面向

InputStream(字节流)、Reader(字符流)、Configuration(类),字节流和字符流都是通过读取XML配置文件的形式创建SqlSessionFactory,而Configuration采用的是java代码方式创建SqlSessionFactory,我们一般常用的是读取配置文件的形式;

其实这三种方式最后都讲归为一种方式,那就是Configuration类的方式,不论是InputStream(字节流),还Reader(字符流),其所对应的配置文件都将由SqlSessionFactoryBuilder类解析成Configuration类,然后交给SqlSessionFactory去创建,如下图

SqlSessionFactory类是一个接口,有两个实现类,分别是DefaultSqlSessionFactory和SqlSessionManager,其中SqlSessionManager还实现了SqlSession接口,DefaultSqlSessionFactory的工作主要就是打开SqlSession会话,而SqlSessionManager除了打开SqlSession会话之外,还负责一些具体的增删改查和事务、回滚等操作,当然这主要是SqlSession接口的功能,一般我们采用DefaultSqlSessionFactory类。

 2. SqlSessionFactory(工厂接口)

负责开启一个SqlSession会话,使用实例就是:sqlSession = sqlSessionFactory.openSession();

3. SqlSession(会话).

SqlSession主要负责的就是具体的SQL执行了,首先是获取映射器,然后再根据映射器里面的命名空间和ID获取到对应SQL,然后发送到数据库执行后返回结果,与此同时它也支持事务,通过commit、rollback方法提交或者回滚事务。下图是DefaultSqlSession的selectList方法,交给Executor去执行,Executor(执行器)负责整个SQL语句的执行,具体Executor如何执行SQL我将会在后续的笔记中重点介绍。

4. SQL Mapper(映射器)

映射器是MyBatis最重要的组件,也是最复杂的组件,它由一个XML文件和一个Java接口构成。他有着诸多强大的特性:例如动态SQL,缓存等等。它的主要作用是将查询结果映射成一个POJO对象。它的实现也有两种方式,XML文件形式和@注解形式。

有以下4个作用:

  1. 描述映射规则
  2. 配置缓存
  3. 提供SQL语句,配置SQL参数类型,返回类型,缓存刷新等
  4. 提供动态SQL

推荐使用XML的形式,因为XML形式结构清晰,SQL都在Mapper文件里面,和DAO层接口分开,易于维护,并且对于复杂SQL有很大好处。通过注解的形式就和平常使用注解一样,直接在DAO层接口的方法上使用@注解,并把SQL语句卸载注解里面,缺点就显而易见了,结构不清晰,复杂SQL。。。,简直不敢想象,@注解的形式如下:

XML的形式如下:

DAO接口

XML文件

<mapper>元素:其中的namespace对应的是一个接口的全限定名,这样MyBatis就可以根据上下文找到对应的接口

<select>元素:表明这是一个查询的语句,id作为标识,parameterType="int"说明是传递给SQL是一个int型的参数, resultType="com.feiyu.POJO.User">表明返回的是一个user类型的返回值。

学习MyBatis给大家推荐几个网站:

MyBatis中文简介:http://www.mybatis.org/mybatis-3/zh/index.html

MyBatis中文网:http://www.mybatis.cn/

MyBatis-Spring:http://www.mybatis.org/spring/zh/index.html

MyBatis学习笔记(一) 概述的更多相关文章

  1. 【MyBatis学习笔记】

    [MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...

  2. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  3. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

  4. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  5. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  6. mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)

    下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...

  7. mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现

    项目结构  基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...

  8. Mybatis学习笔记二

    本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...

  9. Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)

    一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...

随机推荐

  1. powershell ParameterSet解析

    自定义PowerShell函数,在设置参数的时候中,可以将参数设置为某些情况下可选,某些条件下又设置为必选. 示例代码从网站复制的. function Connect-Somewhere { [Cmd ...

  2. docker相关操作

    docker 安装参照官网一步一步来,特别简单,主要是下载比较慢: docker 需要 管理员权限: docker 相关命令: 容器生命周期管理 — docker [run|start|stop|re ...

  3. freeRTOSConfig.h文件对FreeRTOS进行系统配置

    FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制.每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核.这个配置文件是针 ...

  4. Rabbit RPC 代码阅读(一)

    前言 因为想对RPC内部的机制作一个了解,特作以下阅读代码日志,以备忘. RPC介绍 Rabbit RPC 原理可以用3点概括: 1.服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务 ...

  5. FTPClient 中 FTPClient.changeWorkingDirectory(filePath) 代码一直返回 false

    FTP文件下载需要的jar包: commons-net-2.0.jar  有时可能还需要:jakarta-oro.jar 参考:FTPClient参考文档 这里记录下我碰到的问题: 刚开始我的账号和密 ...

  6. 使用 PLSQL 连接 Oracle9i 数据库

    昨天用了Navicate连接Oracle数据库,不停的掉线,然后死机,只能重启Navicate,没办法,还是用回plsql吧,重装了一遍(之前重装系统后,电脑自带的公司原有的软件没啦) 先安装了Ora ...

  7. AndroidStudio制作个人资料界面模块以及SQLite数据库的使用

    前言 大家好,给大家带来AndroidStudio制作个人资料界面模块以及SQLite数据库的使用的概述,希望你们喜欢 学习目标 掌握SQLite数据库的使用,能够实现用数据库来保存用户的信息: 学会 ...

  8. 首页背景图片在PC端有显示,在手机端不显示的解决方法

    今天看博客的资源大小,发现背景图片有44k大的吓人,准备压缩一下. 压缩之后才发现,我的背景图片在手机端是没有显示的.原因是背景图片不支持缩放. 上网查了下,发现加入如下代码之后就支持缩放了: bac ...

  9. Archive required for library “xxx” cannot be read or is not a valid zip file报错解决

    在项目中导入别人的maven项目时报错:Archive required for library “xxx” cannot be read or is not a valid zip file 网上查 ...

  10. Qt之使用CQU库快速开发统一风格界面

    在使用Qt开发时,肯定是想让开发的项目界面统一风格:不希望每个界面都要程序员用代码去修饰美化以及进行事件处理等等,这样非常繁琐,容易出错而且没有格调:所以我就开发一个动态链接库,封装统一的风格界面.事 ...