关于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有注入,随便都 ...
随机推荐
- MySQL按周统计 WEEK 实例
MySQL按周统计每周数据总和,用到了WEEK,subdate,date_format,date_sub,date_add函数. WEEK() 查看给定日期周数,语法:WEEK(date, mode) ...
- 记录7: office 2016 Mac不能使用的解决过程
前几天更新硬盘并升级到high sierra后,今天第一次打开word/excel发现用不了,提示让我进行active.很奇怪,之前的license应该是一直有效的.于是去www.office.com ...
- eclipse连接mysql数据库
我这里在eclipse新建一个maven 项目做测试 首先我们要在本地电脑安装了mysql数据库和mysql驱动包 我的mysql数据库是通过phpstudy自带的 这个是驱动包 window–> ...
- django 三种缓存模式的使用及注意点
Django 缓存模式的使用(主要针对RestFul设计模式的项目) 有三种模式: 全站使用缓存模式(整个项目每个接口都会使用缓存,缺点:所以接口都无法实时性获取数据) 单独视图缓存模式(单个接口使用 ...
- LayaAir疑难杂症之二:字符输入限制不生效(多个限制条件该如何赋值给restrict)
问题描述 采用LayaAir进行开发,在使用TextInput时,对restrict属性进行赋值,使该输入框只允许输入中英文.数字,restrict = “[\u4E00-\u9FA5A-Za-z ...
- gunicorn开启、关闭和重启
1.gunicorn开启 在项目的根目录下,输入下方的代码. gunicorn --bind unix:/tmp/域名.socket projectname.wsgi:application 2.查询 ...
- AET PN结
电场方向 电场方向和正电荷受力方向相同 飘移运动和扩散运动 多子和电场方向互相抵制,而多子是扩散运动,而对少子则是促进作用,当扩散和漂移达到动态平衡时,我们称PN结形成 PN结特性 单项导电性
- LeetCode 92. Reverse Linked List II倒置链表2 C++
Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ...
- Linux 常用系统工作命令
1.echo 用于输出字符串或者变量的值 2.date 显示及设置系统的时间和日期,格式为 “date [选项][+指定格式]”,输入以“+”号开头的参数,及可按照指定格式输出 date命令参数及作用 ...
- bootstrap之bootstrap-table插件使用心得以及实现过程
1.首先一个页面(增删改查) 2.实现增删改查(一个框架) 3.编码问题(前端meta utf-8:引用中文包:contentType参数区utf-8的设置:响应的utf-8的编码设置) 4.多条件查 ...