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

发布于:2022-11-28 ⋅ 阅读:(203) ⋅ 点赞:(0)

前言

相信大部分程序员工作中都有接触过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的适用场景。这里先把本节所用到的一些公共类和配置贴出来,后面但凡用到这些类和配置的地方,大家可以到这里进行查看。如下:

public class Article {
private Integer id;
private String title;
private String author;
private String content;
private Date createTime;
// 省略 gettertter 和 toString
}

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

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

表记录如下:

1.2.使⽤MyBatis访问数据库

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

 <mapper namespace="xyz.coolblog.chapter1.dao.ArticleDao">
       <select id="findByAuthorAndCreateTime" resultType="Article">
               SELECT
                      `id`, `title`, `author`, `content`, `create_time`
               FROM
                      `article`
               WHERE
                      `author` = #{author} AND `create_time` > #{createTime}
     <lect>
</mapper>

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

public interface ArticleDao {
       List<Article> findByAuthorAndCreateTime(@Param("author") String author, 
             @Param("createTime") String createTime);
}

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

<configuration>
        <properties resource="jdbc.properties"/>
        <typeAliases>
                 <typeAlias alias="Article"
                           type="xyz.coolblog.chapter1.model.ArticleDO"/>
                 <typeAlias alias="Author" type="xyz.coolblog.model.AuthorDO"/>
<peAliases>
<environments default="development">
          <environment id="development">
                 <transactionManager type="JDBC"/>
                 <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/>
                        <property name="url" value="${jdbc.url}"/>
                        <property name="username" value="${jdbc.username}"/>
                       <property name="password" value="${jdbc.password}"/>
                      </dataSource>
                     </environment>
               </environments>
           <mappers>
                    <mapper resource="chapter1/mapper/ArticleMapper.xml"/>
           </mappers>
</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面试知识点脑图展示

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到