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. SOCKET选项

    1. IP_TRANSPARENT [1]socket设置该选项后,可以处理发往非本机的数据包. [2]使用流程: 配置防火墙和路由: iptables -t mangle -A PREROUTING ...

  2. JMeter4.0源码导入Eclipse记录

    参考: https://blog.csdn.net/yue530tomtom/article/details/77870233?locationNum=10&fps=1 1.准备jdk环境 下 ...

  3. sc.exe用法详解

    sc.exe是帮助开发 WindowsNT 服务的工具,这里我来说说如何使用好sc.exe. 我们打开命令提示符(以管理员身份运行): 输入sc delete ServiceName(服务名)  即可 ...

  4. sqlserver2008 查看数据库自带的索引建议

    SELECT [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) , a ...

  5. Class.forName的作用?为什么要用?

    答:按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过,则返回代表该字节码的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该 ...

  6. hyper-v下的ubuntu虚拟机分辨率修改

    修改/etc/default/grub sudo vim /etc/default/grub 改变前: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash&qu ...

  7. 目标检测——Faster R_CNN使用smooth L1作为bbox的回归损失函数原因

    前情提要—— 网上关于目标检测框架——faster r_cnn有太多太好的博文,这是我在组会讲述faster r_cnn这一框架时被人问到的一个点,当时没答上来,于是会下好好百度和搜索一下研究了一下这 ...

  8. kettle删除移动文件

  9. spring boot application.properties详解

    附上最新文档地址:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-propertie ...

  10. RPM包指令总结

    一.RPM RPM包安装位置 RPM包默认安装路径 /etc/ 配置文件安装目录 /usr/bin/ 可执行的命令安装目录 /usr/lib/ 程序所使用的函数库保存位置 /usr/share/doc ...