一、什么是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

转载于:https://www.cnblogs.com/hpuiotcl/p/10693339.html

MyBatis学习笔记(一) 概述相关推荐

  1. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  2. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  3. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  4. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  5. ant的下载与安装——mybatis学习笔记之预备篇(一)

    看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...

  6. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

  7. mybatis学习笔记(1)-对原生jdbc程序中的问题总结

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(1)-对原生jdbc程序中的问题总结 标签:mybatis [TOC] 本文总结jdbc编程的一般步骤 ...

  8. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)--动态SQL 转载于:https://www.cnblogs.com/MrSaver/p/7453949.html

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

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

  10. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五

    在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...

最新文章

  1. Java数据库foreign,mysql中的外键foreign key 作者:Java_xb
  2. 几种Linux段错误调试方法
  3. Pandas高级教程之:处理缺失数据
  4. Linux虚拟机安装应用程序提示Graphical installers are not supported by the vm
  5. Java并发编程以及并发须知的几个概念:什么是线程安全?
  6. css怎么让两个table并排_关于CSS布局
  7. 2020年10月“省时查报告”十大热门报告盘点(附下载链接)
  8. 拖动时候的样式怎么改_你对“挡拆”的死板印象是时候要改了!看看欧文、保罗都是怎么做的吧。...
  9. 联想笔记本linux无线网卡驱动下载,联想无线网卡驱动下载-联想 X1 Carbon网卡驱动下载v18.40.0 官方最新版-西西软件下载...
  10. python猜数字统计游戏次数_猜数字游戏的实现(Python3.5)
  11. android 人脸识别边框_android自定义Arcface人脸识别框/人脸抓拍框/人脸追踪框
  12. 2018计算机二级html,2020年全国计算机二级Web程序设计考试大纲(2018年版)
  13. CSDN-markdown编辑器的模板(自己码一下方便以后使用)
  14. 从play store下载apk
  15. Visual studio 2015 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
  16. Python 爬取蜻蜓FM免费音频页面的音频
  17. 苹果手机话筒声音小怎么办_手机的声音小怎么办
  18. SVN入门及配置使用(多平台)
  19. 支付宝 福卡 出花花卡 敬业福 的 福图片
  20. c语言编写法国国旗,你对法国国旗知多少?

热门文章

  1. 简述负载均衡CDN技术
  2. BAT都不让多表 join?这是为什么?
  3. Facebook提高工作效率的秘密 ,值得收藏
  4. hao123谢幕,那是80后青春的记忆
  5. 【限时免费】架构和运维技术高峰论坛 (成都站)
  6. 标准的软件开发是怎样的?
  7. java addmonth_JAVA:int month = n.get(Calendar.MONTH)+1;为何要加1?
  8. 小程序中canvas绘制网络图片
  9. 雪饮者 决策树系列(二)决策树应用
  10. CHR-6dm datasheet 中文翻译