1. 历史

MyBatis本是apache的一个开源项目iBatis。
2010年这个项目由apache software foundation 迁移到了google code,并且取名为MyBatis。
2013年11月迁移到Github

2. 什么是Mybatis

Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。

3. mybatis与hibernate对比

Hibernate

hibernate是全自动的,hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。
功能强大,数据库无关性好,O/R映射能力强,需要写的代码很少,开发速度很快。
拥有完整的日志系统,涉及广泛,包括sql记录、关系异常、优化警告、缓存提示、脏数据警告等。

但相对的,学习门槛高,精通门槛高,需要程序员有非常扎实的经验和能力才能熟练运用。
我们无法直接维护sql。而且,即使有sql查询,但是功能还是不及sql查询(如果只是使用一些简单的查询,hibernate足以应对)。

Mybatis

上手难度低,易掌控,提供了数据库查询的自动对象绑定功能,而且延续了很好的sql使用经验,对与没有那么高的对象模型要求的项目来说,相当完美。
sql写在xml里,便于统一管理和优化,解除sql与程序代码的耦合。提供xml标签,支持编写动态sql。
在速度上相对比Hibernate的速度快。

但相对的,当关联表多的时候,字段多的时候,sql工作量很大。
并且不支持级联更新,级联删除。
Mybatis的日志除了基本记录功能外,其他功能薄弱很多

4. 误区

mybatis是一个直接访问数据库的框架(其实不是的)
准确来说,mybatis不会直接和数据库打交道。mybatis其实是对jdbc api进行封装,也就是说和数据库打交道的依旧是jdbc。

5. 执行原理

jdbc执行原理:
加载jdbc驱动 --> 通过配置文件映射 --> 建立并获取数据库连接 --> 创建JDBC Statements(或PreparedStatement)对象 --> 执行sql语句并且获得查询结果 --> 释放资源

mybatis运行原理:
解析SqlConfig.xml配置文件 --> 加载SqlSessionFctory获取SqlSession对象 --> 通过SqlSession对象获取Executor对象 --> 执行映射语句在数据库里获取对应的值

积累点点滴滴,一步一脚印,加油

通过查询资料、翻阅文档,在这里对所了解到mybatis的知识先进行一下总结。有想到之后博客还会有补充,如有缺漏和错误还望指正。

关于Mybatis浅谈的更多相关文章

  1. [MyBatis]浅谈如何实现事务处理

    要实现事务处理,就得从SqlSession中取出connection来,然后对connection采用setAutoCommit,commit,rollback等操作,最后的时候,不能像JDBC一样关 ...

  2. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  3. 浅谈 Java 主流开源类库解析 XML

    在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...

  4. 浅谈Log4j和Log4j2的区别

    相信很多程序猿朋友对log4j都很熟悉,log4j可以说是陪伴了绝大多数的朋友开启的编程.我不知道log4j之前是用什么,至少在我的生涯中,是log4j带我开启的日志时代. log4j是Apache的 ...

  5. 阿里P7浅谈SpringMVC

    一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...

  6. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  7. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  8. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  9. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

随机推荐

  1. 访问arcserver中的featureServer服务

    1.在arcmap中加载图层,并发布成arcser服务(服务名dizhi),记住勾选FeatureServer服务 2.在arcserver manger中查看刚才发布的服务 3.访问featureS ...

  2. mybatis关于ORM的使用以及设计(一)[ORM的初始化]

    ORM WIKI中的解释.画重点 Object-relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is ...

  3. 简单的PHP单例模式

    class MySQL { private static $instance; // 阻止外部实例化 private function __construct() { # code... } // 阻 ...

  4. Tomcat的startup.bat启动后显示乱码

    打开tomcat文件夹到conf目录下 修改logging.properties 找到 java.util.logging.ConsoleHandler.encoding = utf-8这行 更改为 ...

  5. logstash同步mysql数据失败

      问题描述 前提: 项目采用Elasticsearch提供搜索服务,Mysql提供存储服务,通过Logstash将Mysql中数据同步到Elasticsearch. 问题: 使用logstash-j ...

  6. flink入门:01 构建简单运行程序

    1. mac平台安装flink(默认最新版) brew install apache-flink 安装结果: Version 1.7.1, commit ID: 89eafb4 2. jdk版本,我尝 ...

  7. 设置mysql远程连接

    https://www.cnblogs.com/linjiqin/p/5270938.html

  8. ubuntu下多版本OpenCV的共存与使用

    首先,OpenCV历史版本下载:https://www.opencv.org/releases.html 一.把不同版本的OpenCV安装在不同位置 下载好OpenCV源码,在安装之前打开CMakeL ...

  9. 2018-2019-2 20165205 Exp2 后门原理与实践

    20165205 Exp2 后门原理与实践 实验内容 一.基础问题回答 列举你能想到的一个后门进入到你系统中的可能方式 下载盗版软件.操作系统 当然正版软件里可能也有编写者安装的后门 不在官方更新软件 ...

  10. EF core2.1+MySQL报错'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBuilder..ctor(Microsoft.EntityFrameworkCore.Storage.IRelationalTypeMapper)

    一.使用.net core 2.0 EF mysql 运行一直报错如下: An unhandled exception occurred while processing the request. M ...