Mybatis(一)入门介绍
一、MyBatis的发展
MyBatis 是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到google code, 并且改名MyBatis。2013年迁移到Github。
MyBatis是一个持久层框架,它将jdbc的操作数据库进行封装,帮助开发者专注于sql本身,避开了注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc等繁琐的过程代码。
MyBatis 通过xml或者注解方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
二、MyBatis和Hibernate相比的优点
先说Hibernate的优点:
1、Hibernate 对JDBC进行了封装,减少SQL硬编码;
2、避免了代码的映射规则,通过XML或注解避免了管理数据库连接;
3、使用HQL,支持方言配置,方便数据库移植;
4、在一个会话中不需要操作多个对象,只需要操作一个session(在spring下,都由spring来管理)。
然后Hibernate的缺点:
1、在存储过程这方面并不是太好;
2、对多表关联和复杂SQL操作不太友好,针对这方面,还需要自己写SQL;
3、虽然使用HQL语言查询,但是性能不高,在处理比较大的系统和数据时,需要优化SQL提高效率;
而MyBatis在一定程度上可以避免了Hibernate的缺点。MyBatis需要手动编写SQL语句和映射关系。
区别:
与hibernate相比, MyBatis不完全是一个ORM框架,MyBatis需要编写sql语句并且通过XML或者注解的方式配置运行的sql语句。并通过java对象和sql映射成可以执行的sql, 之后再将sql执行的结果映射成java对象。
MyBatis 比较易学,可编写原生sql,并且提高sql执行性能,适合对关系型数据模型不高的软件开发。但是若要实现多种数据库的软件则需要多个sql映射文件。
Hibernate 对象,映射强,数据库无关性好,与上面相反。
三、MyBatis 架构
1、 MyBatist框架架构图片
下图是MyBatist框架架构(自于MyBatis官方文档的图,the image is from MyBatis Official document)

(图片版权归mybatis 官方文档所有)
2、框架介绍
1)SqlMapConfig.xml 是Mybatis的全局配置文件,配置了mybatis的运行环境等信息。MapperN.xmls是sql的映射文件,文件中配置了操作数据库 的sql语句,需要通过SqlMapConfig.xml加载;
2)通过mybatis环境配置信息构造SqlSessionFactory(会话工厂);
3)再通过SqlSessionFactory创建sqlSession会话(需要通过sqlSession操作数据库 );
4)MyBatis 底层定义了Exectuor执行器接口操作数据库,Exectuor接口有两个实现,一个是基本执行器,一个是缓存执行器;
5)MappedStatement是Mybatis底层封装对象,包装了mybatis配置信息以及sql映射信息。mapper.xml文件中一个sql对应一个MappedStatement对象,sql的id即是MappedStatement的id。
6)MappedStatement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo, Executor通过MappedStatement 执行sql前将java对象映射到sql中,输入参数映射就是JDBC编程中对preparedStatement设置参数;
7) 输出结果映射过程相当于JDBC编程中对结果的解析处理过程。
Mybatis(一)入门介绍的更多相关文章
- mybatis简单入门介绍
mybatis入门 简介 什么是mybatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及 ...
- Mybatis的学习总结:mybatis的入门介绍
一.myBatis简述 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- mybatis入门介绍一
首先介绍一下Mybatis是什么?mybatis是Java的持久层框架, JAVA操作数据库是通过jdbc来操作的,而mybatis是对jdbc的封装. 使用mybatis之后,开发者只需要关注sql ...
- mybatis入门介绍二
相信看过我的上一篇博客的同学都已经对mybatis有一个初步的认识了.这篇博客主要是对mybatis的mapper代理做一下简单的介绍,希望能够帮助大家共同学习. 我的上一篇博客:mybatis入门介 ...
- MyBatis从入门到精通(第5章):5.4 Example 介绍
jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.Eclipse Version: 2019-12 M2 (4.14.0) MyBatis从入门到精通(第5章):MyBatis代码 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis入门学习教程-MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
随机推荐
- postman接口测试
拿到API,直接拖到postman里面,修改一下params,send之后查看结果返回 说明一下: 1.get的内容,写入测试URL 和API地址 2.点击bulkEdit,编辑请求的key+valu ...
- Traffic Management Gym - 101875G
题意: 有n辆车,在一条直线上运动,给定位置和速度.如果后车追上前车,则后车不会超车,而已变成前车的速度前进,问最后一次上述车速变化发生在何时. 思路: 假设有一下车辆,数字代表移动速度,具体位置未知 ...
- java的零拷贝机制
转:https://blog.csdn.net/zhouhao88410234/article/details/77574689?fps=1&locationNum=9 为何要懂零拷贝原理?因 ...
- (string 数组) leetcode 804. Unique Morse Code Words
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
- Ajxa验证用户和二级联动的实例(五)
验证用户: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...
- Thymeleaf中的&&解析问题
1.问题: 最近使用了新的html模板thymeleaf..在模板里使用js语法时遇到问题,&&不能正确的被解析,使用if(a&&b){}可以通过模板解析,但是浏览器上 ...
- Shell中变量扩展操作
假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir ...
- 全角的空格(A1A1)惹的祸!
#先上干货 “A1A1”是指全角的空格(GBK码): #验证 由上图可以看出半角的空格的HEX为"20": 由上图可以看出,在ANSI格式编码的文件中输入的全角的空格,转换为HEX ...
- MyBatis-${}与#{}
一.看两种取值的效果 <select id="selectMyUserIdAndAge" resultType="myUser"> select * ...
- ibatis项目启动报错The string "--" is not permitted within comments【原】
该错误主要就是因为xml中<!-- [注释]--> 注释与-->之间没有空格造成xml解析错误 sqlMapConfig.xml内容如下 <?xml version=" ...