关于Mybatis浅谈
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浅谈的更多相关文章
- [MyBatis]浅谈如何实现事务处理
要实现事务处理,就得从SqlSession中取出connection来,然后对connection采用setAutoCommit,commit,rollback等操作,最后的时候,不能像JDBC一样关 ...
- 【架构】浅谈web网站架构演变过程
浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管 ...
- 浅谈 Java 主流开源类库解析 XML
在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...
- 浅谈Log4j和Log4j2的区别
相信很多程序猿朋友对log4j都很熟悉,log4j可以说是陪伴了绝大多数的朋友开启的编程.我不知道log4j之前是用什么,至少在我的生涯中,是log4j带我开启的日志时代. log4j是Apache的 ...
- 阿里P7浅谈SpringMVC
一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
随机推荐
- php对函数的引用
function &example($tmp=0){ //定义一个函数,别忘了加“&”符 return $tmp; ...
- 二叉排序树插入C语言版 递归步骤理解
//二叉排序树 插入 (纯C语言实现) BTNode * BSTInsert2(BTNode *bt,int key){ //为什么纯C语言实现中 if(bt==NULL){ //要写成 bt-> ...
- VM12中CentOS7以NAT方式连接网络的方法
解决问题:centos网络连不上,连不上主机,ifconfig等命令不能用(配完有网了,安装上就好了)等问题 前提:安装vm12,centos7(最小安装) 注意:以下以192开头的,你都要替换成自 ...
- Python Queue(队列)
Queue模块实现了多生产者.多消费者队列.当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用,实现了所有必需的锁定语义. 一.该模块实现了三种类型的队列,它们的区别仅在于检索条目的顺序: ...
- when to use reinterpret_cast
写的太好了.. When you convert for example int(12) to unsigned float (12.0f) your processor needs to invok ...
- Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView
目标需求 实现一张小图片,被点击后变成一个在整个屏幕上显示的大图片.类似于微信朋友圈的图片. 实现流程 1.Fresco基本初始化 2.下载并且导入ZoomableDraweeView 它是实现大图的 ...
- apue第九章之孤儿进程组
1. 为什么会有孤儿进程组的概念,APUE没直接写,但是GNU有规定: 孤儿进程组不可以获得终端,这是为了保证控制进程死掉后他的终端可以安全分配给新session.posix要求向新孤儿进程组中停止状 ...
- H5使用codovar插件实现微信支付(微信APP支付模式,前端)
H5打包的app实现微信支付及支付宝支付,本章主要详解微信支付,支付宝支付请查看另一篇“H5使用codovar插件实现支付宝支付(支付宝APP支付模式,前端)” ps:本文只试用H5开发的,微信 AP ...
- P4136 谁能赢呢?
题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问 ...
- 安装和使用Docker(Windows7)
1.Boot2Docker Boot2Docker是实现Docker的软件.Windows下的Docker只适合于开发测试(大部分人也就是干开发测试的..),不适合于生产环境. Boot2Docker ...