近期深入学习我们工作中基本都会使用到的Mybatis框架,从mybatis的框架设计上收获良多,下面用一篇简单易懂的文章分享一下学习心得,文末会结合阅读的源码结构进行模拟手写一个简易版的mybatis调用代码加深理解。
一.什么是Mybatis?
根据官网定义:mybatis – MyBatis 3 | Introduction
MyBatis 是一款优秀的持久层ORM框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二.Mybatis作为ORM框架,和传统的JDBC有什么区别?
ORM全称是Object-Relaction-Mapper,顾名思义就是将对象-数据库关系映射,就是通过Java的POJO类(类似Model层的VO)直接与数据库的表/字段建立关联关系,让使用者可以直接通过Java去直接直观地操作数据库表/字段。
ORM框架是为了解决JDBC一系列存在问题而诞生,那么传统JDBC存在哪些弊端呢?
(1)JDBC底层没有使用连接池,操作数据库需要不断创建连接,关闭连接,会带来比较大的性能消耗;
(2)JDBC的sql在Java原生方式编写,如果改动需要重新编译不利于系统维护;
(3)JDBC使用PrepareStatement预编译方式,对变量赋值时需要维护索引号,需要使用setInt、setString等硬编码写法,不利于拓展;
(4)JDBC返回的结果集ResultSet解析结果时,也不得不进行硬编码。
而Mybatis针对这些问题都封装了一系列工具类来解决,使得使用者不需要过多关注JDBC层的连接和硬编码问题。
三.快速开始
下面以我自己使用的配置,对mybatis的简单使用进行介绍,更多使用可以查阅官网。
Maven配置添加mybatis依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
resources目录下mybatis-config.xml全局文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property