• 开发3年入职饿了么P6,全靠这份MyBatis学习笔记了


    前言

    相信大部分程序员工作中都有接触过MyBatis,那么它到底重不重要呢?答案是肯定的呀!

    互联网公司基本都是用Mybatis做为持久层框架的,所以,Mybatis是一定要学的!!!

    不管是在工作中还是面试中都会牵扯到Mybatis。

    但是,你对它了解吗?了解多少呢?有多了解?工作遇到能解决吗?面试问到能回答上来吗?

    废话不多少,让我们一起来看看Mybatis的神秘之处吧~

    一、MyBatis 是什么?

    MyBatis的前身是 iBatis,iBatis是Apache软件基金会下的一个开源项目。2010年该项目从Apache基金会迁出,并改名为MyBatis。同期,iBatis停止维护。MyBatis是一种半自动化的Java持久层框架(persistenceframework),其通过注解或XML的方式将对象和SQL关联起来。之所以说它是半自动的,是因为和Hibernate等一些可自动生成SQL的ORM(ObjectRelationalMapping)框架相比,使用MyBatis需要用户自行维护SQL。维护SQL的工作比较繁琐,但也有好处。比如我们可控制SQL逻辑,可对其进行优化,以提高效率。

    二、Mybatis的优点

    基于sql语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,sql写在xml 里,解除sql与程序代码的耦合,便于统一管理;提供xml标签,支持编写动态sql语句,并可用。与jdbc相比,减少了50%以上的代码量,消除 jdbc大量冗余的代码,不需要手动开关连接;很好的与各种数据库兼容(因为 mybatis 使用jdbc来连接数据库,所以只要jdbc支持的数据库Mybatis都支持)。能够与spring很好的集成;提供映射标签,支持对象与数据库的orm字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

    三、为什么要使⽤ MyBatis

    1.1我们在使用 Java 程序访问数据库时,有多种可选方案。

    比如我们可通过编写最原始的JDBC 代码访问数据库,或是通过Spring提供的JdbcTemplate访问数据库。除此之外,我们还可以选择Hibernate,亦或是本书的主角MyBatis 等。在有多个可选项的情况下,我们为什么选择MyBatis呢?要回答这个问题,我们需要将MyBatis与这几种框架对比一下,高下立判。当然,技术之间一般没有高下之分。从应用场景的角度来说,符合应用场景需求的技术才是合适的选择。接下来我们通过写代码的方式,来对比这几种数据库访问技术的优缺点,并在最后说明MyBatis的适用场景。这里先把本节所用到的一些公共类和配置贴出来,后面但凡用到这些类和配置的地方,大家可以到这里进行查看。如下:

    1. public class Article {
    2. private Integer id;
    3. private String title;
    4. private String author;
    5. private String content;
    6. private Date createTime;
    7. // 省略 gettertter 和 toString
    8. }

    数据库相关配置放在了jdbc.properties 文件中,详细内容如下:

    1. jdbc.driver=com.mysql.cj.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/myblog?useUnicode=true ……
    3. jdbc.username=root
    4. jdbc.password=****

    表记录如下:

    1.2.使⽤MyBatis访问数据库

    前面说过,MyBatis是一种半自动化的Java持久层框架,需要用户自行维护 SQL。这里,我们把SQL放在 XML 中,文件名称为ArticleMapper.xml。如下:

    1. <mapper namespace="xyz.coolblog.chapter1.dao.ArticleDao">
    2. <select id="findByAuthorAndCreateTime" resultType="Article">
    3. SELECT
    4. `id`, `title`, `author`, `content`, `create_time`
    5. FROM
    6. `article`
    7. WHERE
    8. `author` = #{author} AND `create_time` > #{createTime}
    9. <lect>
    10. </mapper>

    上面的SQL用于从article表中查询出某个作者从某个时候到现在所写的文章记录。在MyBatis中 ,SQL映射文件需要与数据访问接口对应起来,比如上面的配置对应
    xyz.coolblog.dao.ArticleDao接口,这个接口的定义如下:

    1. public interface ArticleDao {
    2. List
      findByAuthorAndCreateTime(@Param("author") String author,
    3. @Param("createTime") String createTime);
    4. }

    要想让MyBatis跑起来,还需要进行一些配置。比如配置数据源、配置SQL映射文件的位置信息等。本节所使用到的配置如下:

    1. <configuration>
    2. <properties resource="jdbc.properties"/>
    3. <typeAliases>
    4. <typeAlias alias="Article"
    5. type="xyz.coolblog.chapter1.model.ArticleDO"/>
    6. <typeAlias alias="Author" type="xyz.coolblog.model.AuthorDO"/>
    7. <peAliases>
    8. <environments default="development">
    9. <environment id="development">
    10. <transactionManager type="JDBC"/>
    11. <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/>
    12. <property name="url" value="${jdbc.url}"/>
    13. <property name="username" value="${jdbc.username}"/>
    14. <property name="password" value="${jdbc.password}"/>
    15. </dataSource>
    16. </environment>
    17. </environments>
    18. <mappers>
    19. <mapper resource="chapter1/mapper/ArticleMapper.xml"/>
    20. </mappers>
    21. </configuration>

    总结

    下面这个图是Mybatis的一个思维导图知识点总结,大家需要可以自取。

    一些常见Mybatis面试题都整理成了PDF文档(含答案)

    1.# {}和${}的区别?

    2.Mybatis都有哪些Executor执行器?它们之间的区别是什么?

    3.Mybatis中如何指定使用哪一种Executor执行器?

    4.Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

    5.Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

    6.模糊查询like语句该怎么写?

    7.分页方式?

    8.pageHelper原理?

    9.模糊查询like语句该怎么写?

    10.通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

    11.Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

    12.Mybatis 中一级缓存与二级缓存的区别?

    13.MyBatis中所有标签?

    14.简述Mybatis的插件运行原理,以及如何编写一个插件。

    15.如何执行批量插入?

    16.如何获取自动生成的(主)键值?

    17.在mapper中如何传递多个参数?

    18.缓存类介绍

    19.植⼊插件逻辑

    20.实现⼀个分页插件

    .........

    Mybatis面试知识点脑图展示

    Mybatis面试知识点脑图展示

    以上提到的面试题解析Mybatis文档,以及Mybatis知识点思维导图都可以分享给小伙伴们

  • 相关阅读:
    参考图像彩色化网络修改流程(自用版)
    Java 三路快排
    sql server学习笔记
    上手Python之包
    dp入门课(一)
    Ansible自动化运维
    爱思唯尔——利用AI来改善医疗决策和科研
    【C++】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 )
    Python3 - Linux 下安装 LibreOffice 以及使用
    教程二 在Go中使用Energy创建跨平台应用 - 创建应用
  • 原文地址:https://blog.csdn.net/LBWNB_Java/article/details/128146835