MyBatis 源码分析系列文章导读

本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章。本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说明和演示。由于文章的篇幅比较大,这里特地拿出一章用于介绍本文的结构和内容。那下面我们来看一下本文的章节安排:

MyBatis 源码分析系列文章导读

如上图,本文的大部分篇幅主要集中在了第3章和第4章。第3章演示了几种持久层技术的用法,并在此基础上,分析了各种技术的使用场景。通过分析 MyBatis 的使用场景,说明了为什么要使用 MyBatis 这个问题。第4章主要用于介绍 MyBatis 的两种不同的用法。在 4.1 节,演示单独使用 MyBatis 的过程,演示示例涉及一对一和一对多的查询场景。4.2 节则是介绍了 MyBatis 和 Spring 整合的过程,并在最后演示了如何在 Spring 中使用 MyBatis。除了这两章内容,本文的第2章和第5章内容比较少,就不介绍了。

以上就是本篇文章内容的预览,如果这些内容大家都掌握,那么就不必往下看了。当然,如果没掌握或者是有兴趣,那不妨继续往下阅读。好了,其他的就不多说了,咱们进入正题吧。

2.什么是 MyBatis

MyBatis 的前身是 iBatis,其是 Apache 软件基金会下的一个开源项目。2010年该项目从 Apache 基金会迁出,并改名为 MyBatis。同期,iBatis 停止维护。

MyBatis 是一种半自动化的 Java 持久层框架(persistence framework),其通过注解或 XML 的方式将对象和 SQL 关联起来。之所以说它是半自动的,是因为和 Hibernate 等一些可自动生成 SQL 的 ORM(Object Relational Mapping) 框架相比,使用 MyBatis 需要用户自行维护 SQL。维护 SQL 的工作比较繁琐,但也有好处。比如我们可控制 SQL 逻辑,可对其进行优化,以提高效率。

MyBatis 是一个容易上手的持久层框架,使用者通过简单的学习即可掌握其常用特性的用法。这也是 MyBatis 被广泛使用的一个原因。

3.为什么要使用 MyBatis

我们在使用 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; // 省略 getter/setter 和 toString }

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

jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/coolblog?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE jdbc.username=root jdbc.password=****

表记录如下:

MyBatis 源码分析系列文章导读

下面先来演示 MyBatis 访问数据库的过程。

3.1 使用 MyBatis 访问数据库

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

<mapper namespace="xyz.coolblog.dao.ArticleDao"> <resultMap type="xyz.coolblog.model.Article"> <id property="id" column="id"/> <result property="title" column="title"/> <result property="author" column="author"/> <result property="content" column="content"/> <result property="createTime" column="create_time"/> </resultMap> <select resultMap="articleResult"> SELECT `id`, `title`, `author`, `content`, `create_time` FROM `article` WHERE `author` = #{author} AND `create_time` > #{createTime} </select> </mapper>

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsyfs.html