[学习笔记]

什么是mybatis:

Mybatis本质是一种半自动化的ORM框架,前身是ibatis,除了要pojo和映射关系之外,还需要些sql语句。

怎么看待ORM框架:

处理矛盾的,java程序员喜欢面向对象开发和面向接口开发,而数据库是一张张表和一个个库组成的,这两者的关系很难调和,而关系型映射解决了这一个问题。

Mybatis映射文件三要素:

SQL;

映射规则;

Pojo;

为什么要用mybatis而不用hibernate?

在我们互联网的环境里面, 我们经常要面对海量数据,所以我们要基于底层的调优能力,就是sql语句。而hibernate生成的sql语句很不透明。

Mybatis核心流程三大阶段:

初始化阶段,读取XML配置文件和注解中的配置信息,创建解析对象,并完成各个模块的初始化工作。就是把我们的配置文件加载到内存里面去。在sqlSession初始化的时候加载到内存中去的。

代理阶段,封装iBatis的编程模型,使用mapper接口开发的初始化工作;

数据读写阶段,通过SqlSession完成SQL的解析,参数的映射,SQL的执行,结果的反射解析过程。

SqlSession

SqlSession意味着创建数据库会话,代表了一次与数据库的连接;

是mybatis对外提供数据访问的主要API;

实际上SqlSession的功能都是基于Excutor来实现的。

Mybatis的两种编程模型Mybatis封装了ibatis编程模型,使用sqlsession对外提供数据库的访问。还有一种是使用mapper接口编程,就可以访问数据库

Mybatis和ibatis的区别

Mybatis前身是ibatis的,ibatis之前是Apache旗下的产品,后来到了谷歌旗下,但是谷歌发现ibatis实现起来很麻烦,还需要维护静态变量,并且没有业务含义。所以谷歌改成了mybatis,通过面向接口的方式,让所有代码有了业务含义,屏蔽掉了底层代码的复杂性。

为什么使用mapper接口就可以对数据库进行访问了呢?

其实最后它还是转成了底层的ibatis执行方法,它会使用配置文件解读+动态代理, 找到session中的对应方法执行,找到方法的命名空间和方法名。传递参数。

业务流程还是首先要实例化sqlssessionFactory,加载数据库配置文件以及mapper.xml到configuration对象。然后获取sqlsession对象。然后通过动态代理跨越面向接口编程和ibatis编程的鸿沟,最后遵循jdbc的规范,通过底层的四大对象合作完成功能。


版权声明:本文为转载文章。原文地址:https://blog.csdn.net/qq_41665481/article/details/85990904

什么是mybatis?的更多相关文章

  1. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  2. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  3. [原创]mybatis中整合ehcache缓存框架的使用

    mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...

  4. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  5. mybatis plugins实现项目【全局】读写分离

    在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...

  6. MyBatis基础入门--知识点总结

    对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...

  7. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  8. MyBatis源码分析(一)开篇

    源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...

  9. (整理)MyBatis入门教程(一)

    本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...

  10. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

随机推荐

  1. 轻松搞定JSONP跨域请求

    一.同源策略 要理解跨域,先要了解一下"同源策略".所谓同源是指,域名,协议,端口相同.所谓"同源策略",简单的说就是基于安全考虑,当前域不能访问其他域的东西. ...

  2. 基于SDRAM的视频图像采集系统

    本文是在前面设计好的简易SDRAM控制器的基础上完善,逐步实现使用SDRAM存储视频流数据,实现视频图像采集系统,CMOS使用的是OV7725. SDRAM控制器的完善 1. 修改SDRAM的时钟到1 ...

  3. 我眼中的 Nginx(六):深入 Nginx/Openresty 服务里的 DNS 解析

    张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的 ...

  4. MIP 问题解决方案大全(2018-06更新)

    在 MIP 推出后,我们收到了一些站长的疑问.现将常见问题整理出来,帮助大家了解 MIP 的知识. 一.MIP 认知类问题 二.改造前准备 三.前端改造,组件使用 四.提交生效 五.MIPCache ...

  5. Docker最全教程之使用 Visual Studio Code玩转Docker(二十)

    前言 VS Code是一个年轻的编辑器,但是确实是非常犀利.通过本篇,老司机带你使用VS Code玩转Docker——相信阅读本篇之后,无论是初学者还是老手,都可以非常方便的玩转Docker了!所谓是 ...

  6. Flutter 即学即用系列博客——05 StatelessWidget vs StatefulWidget

    前言 上一篇我们对 Flutter UI 有了一个基本的了解. 这一篇我们通过自定义 Widget 来了解下如何写一个 Widget? 然而 Widget 有两个,StatelessWidget 和 ...

  7. Yii2设计模式——工厂方法模式

    应用举例 yii\db\Schema抽象类中: //获取数据表元数据 public function getTableSchema($name, $refresh = false) { if (arr ...

  8. 使用OSG创建一个简单的地形

    目录 1.解决方案 1) 使用TIF格式的DEM 2) 描述HeightField 2.存在问题 3.参考文档 1.解决方案 在网上参考了一些资料,使用OSG创建地形最简单的办法就是使用OSG::He ...

  9. Ambari安装HDP问题:User root is not allowed to impersonate anonymous.User: hcat is not allowed to impersonate ambari-qa

    User root is not allowed to impersonate anonymous 修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项 < ...

  10. 客户端和服务端(C#) 时间戳的生成和转换

    C# DateTime与时间戳的相互转换,包括JavaScript时间戳和Unix的时间戳. 1. 什么是时间戳 首先要清楚JavaScript与Unix的时间戳的区别: JavaScript时间戳: ...