1.MyBatis介绍

MyBatis 本是 Apache 的一个开源项目 iBatis,2010年这个项目由 Apache Software Foundation 迁移到了Google Code,并且改名为 MyBatis 。2013年11月迁移到 Github。

iBatis一词来源于 "internet""abatis"的组合,是一个基于Java的持久层框架。iBatis 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)。

MyBatis 是一款优秀的 ORM 持久层框架,它支持定制化 SQL存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

当前,最新版本是MyBatis 3.5.4 ,其发布时间是2020年2月4日。MyBatis 官网:官网地址。以上内容呢介绍来自:百度百科

2.MyBatis前世

在 MyBatis 等 ORM 框架之前,我们连接数据库完成操作,使用的都是 JDBC ,JDBC 连接数据库步骤如下:

  1. 注册驱动,获取连接;
  2. 创建 Statement对象;
  3. 编写 SQL 语句;
  4. execute()方法执行SQL;
  5. 关闭资源连接。

JDBC 能够满足我们连接数据库获取查询的需求,但是当项目复杂时,直接使用 JDBC 原生API会带来哪些问题呢?

  1. 代码重复的问题;
  2. 查询返回结果集处理困难的问题;
  3. 资源连接管理的问题;
  4. 代码耦合高,SQL语句必须写在代码中的硬编码问题,;
  5. 事务管理的问题。

针对以上问题,使用原生 JDBC 开发导致的各种不爽,由此衍生出了出了一些工具类、框架。比如:Apache DBUtils、Spring JDBC、Hibernate、MyBatis等。在我们日常工作作风,我们又该如何选择这些ORM框架呢?

  1. 业务简单的项目可以使用 Hibernate;
  2. 需要灵活的 SQL ,可以使用 MyBatis;
  3. 对性能要求高,可以使用 JDBC;
  4. Spring JDBC 可以和 ORM 框架混用;
  5. 不推荐 Hibernate 和 MyBatis 框架混用(有的公司会这么搞,哈哈)

3.MyBatis今生

3.1 MyBatis特性

  1. 使用连接池对连接进行管理;
  2. SQL 和代码分离,集中管理;
  3. 参数映射和动态SQL;
  4. 结果集映射;
  5. 缓存管理;
  6. 重复SQL通过SQL片段提取复用;
  7. 插件机制;

3.2 MyBatis 四大核心对象

1. SqlSessionFactoryBuilder

这个类用来创建 SqlSessionFactory。它可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在,以保证所有的 XML 解析资源可以被释放给更重要的事情。

2. SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码"坏味道(bad smell)"。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,常见的就是使用单例模式来创建。

3. SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 每次收到 HTTP 请求,就打开一个 SqlSession,当返回一个响应时,就关闭它。 这个关闭操作是很重要的,你应该把这个关闭操作放到 finally 块中以确保每次都能执行关闭。

4. Mapper

Mapper 映射器是一些由你创建的、绑定你映射的语句的接口。映射器接口的实例是从 SqlSession 中获得的。

3.3 MyBatis编程式开发

3.3.1 前期 MyBatis 开发

@Test
public void testSelect() throws Exception{//配置文件所在路径String resource = "mybatis/mybatis-config.xml";//读取MyBatis配置文件,转换成InputStreamInputStream readerStream = Resources.getResourceAsStream(resource);//创建一个SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(readerStream);//创建一个SqlSession会话SqlSession sqlSession = sqlSessionFactory.openSession();try {//1.MyBatis 在最开始,是直接通过sqlSession 封装好的方法进行调用//com.springboot.dao.UserMapper.selectUserById:为映射器中定义的路径//缺点: 硬编码问题User user = (User) sqlSession.selectOne("com.springboot.dao.UserMapper.selectUserById", 1);System.out.println(user);} finally {sqlSession.close();}
}

3.3.2 现在常用的 MyBatis 开发

@Test
public void testSelect() throws Exception{//配置文件所在路径String resource = "mybatis/mybatis-config.xml";//读取MyBatis配置文件,转换成InputStreamInputStream readerStream = Resources.getResourceAsStream(resource);//创建一个SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(readerStream);//创建一个SqlSession会话SqlSession sqlSession = sqlSessionFactory.openSession();try {//2.如下为使用getMapper()方法,执行操作。// MyBatis 定义了一个 getMapper() 方法,用来解决框架初期的硬编码问题,UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user1 = userMapper.selectUserById(1);System.out.println(user1);} finally {sqlSession.close();}
}

博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

MyBatis的由来相关推荐

  1. Mybatis源码分析开篇

    Mybatis的由来 iBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为M ...

  2. MyBatis学习从练气到化虚

    MyBatis从练气到化虚 一.MyBatis的由来 1.什么是ORM 2.iBatis的由来 3.为什么选择Mybatis 二.MyBatis的基本使用 1.准备数据库 2.创建工程,增加实体类 3 ...

  3. 【MyBatis学习13】MyBatis中的二级缓存

    1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...

  4. 【Mybatis】MyBatis 实现多表查询

    大纲 Auto Mapping 单表实现(别名方式) <resultMap>实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 准备:创 ...

  5. 【MyBatis】MyBatis初体验

    文章目录 框架 软件开发三层结构 MyBatis概念 MyBatis由来 ORM框架与MyBatis的区别 MyBatis编码流程 框架 是一个可以重复使用的设计构件,我们在做开发的时候框架是直接调来 ...

  6. 【转】JPA、Hibernate和Mybatis区别和总结

    很多人都用过java的数据库连接池C3P0,但官方没有说明名称的由来. 据传闻:连接池作者是<星球大战>迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool ...

  7. MyBatis 实现多表查询、resultMap 标签、MyBatis 注解、mybatis运行原理

    内容 Auto Mapping 单表实现(别名方式) 实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 一.MyBatis 实现多表查询 Myba ...

  8. mybatis中转义 大于,小于,大于等于,小于等于

    &                      & <                      < >                      > " ...

  9. Java框架学习笔记--Mybatis学习

    一.Mybatis学习 1.Mybatis简介 简介:Mybatis开源免费框架.原名叫iBatis,2010在googlecode,2013年迁移到github2 作用:数据访问层框架.底层是对JD ...

最新文章

  1. 北京大学计算机研究所所长,北大计算机研究所所长郭宗明:探索新机制,释放科研创新能力...
  2. SQL语句之Insert
  3. selenium之 chromedriver与chrome版本映射表_NLP实战篇之tf2训练与评估
  4. USACO-Section1.5 Mother's Milk (深度优先搜索)
  5. web developer tips (55):多项目解决方案中设置启动项
  6. clock_gettime系统调用详解
  7. SpringCloud 微服务视频教程
  8. 2 电感耦合方式的射频前端
  9. 百度地图迁徙大数据_百度地图发布春运大数据,2020年返程规模下降六成
  10. centos7 下载百度网盘中文件的方法
  11. 某在线商店电子产品销售数据分析-RFM分析方法
  12. markdown用法总结
  13. 成都大数据培训之Python一系列的知识整理
  14. GPU并行计算与CUDA编程第2课第一节
  15. windows10 输入法 切换 热键 快捷键 更改 设置
  16. [转载]VB网络聊天程序的开发(1)_彭世瑜_新浪博客
  17. django jinjia
  18. 奇点iPhone版本正式上线
  19. 互联网日报 | 9月20日 星期日 | 全国共享单车注册用户超4亿;小米今年科研投入超100亿元;苹果股价跌入“技术性熊市”...
  20. 分享一些 Mac 上非常好用的工具软件

热门文章

  1. 怎么查看自己的电脑是几位操作系统?
  2. 暖暖环游世界显示服务器异常,暖暖环游世界
  3. 用Java语言开发物联网设备应用(5)
  4. 【NOIP模拟】序列
  5. 【Java】如何编写、运行一个Java程序
  6. CPU CACHE中的VIPT与PIPT的工作原理
  7. MySQL数据库与数据表的创建
  8. Gregorian Calendar ------ 有趣的日历
  9. 基于.NET平台常用的框架整理
  10. css效果之吸顶效果