MyBatis

简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

基本使用

配置:https://mybatis.org/mybatis-3/configuration.html

如何深入学习 MyBatis?

源码阅读计划

JDBC 规范

想要学好 MyBatis,JDBC 规范是必备的。

MyBatis 框架设计

  1. API接口层

  2. 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

  3. 框架支撑层:包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。

MyBatis 的常用配置

MyBatis 的设计思想和设计原则

MyBatis 小技巧

  • MyBatis 插入数据时返回自增主键

开发过程中,我们往往需要在插入数据后获取当前记录自增后的id,可以使用 select last_insert_id(); 来获取到;但是用了 MyBatis 之后怎么做呢?需要配合 useGeneratedKeys keyProperty , keyProperty的值为传入参数的属性名,Mybatis会自动把自增id的值赋给该属性, 而返回值仍为影响行数:

useGeneratedKeys: insert and update only, This tells MyBatis to use the JDBC getGeneratedKeys method to retrieve keys generated internally by the database, default is false

keyProperty: insert and update only, Identifies a property into which MyBatis will set the key value returned by getGeneratedKeys, or by a selectKey child element of the insert statement. Default: unset. Can be a comma separated list of property names if multiple generated columns are expected.

// xml 的方式
<insert id="insertAuthor" keyProperty="id" useGeneratedKeys="true">
  insert into Author (id,username,password,email,bio)
  values (#{id},#{username},#{password},#{email},#{bio})
</insert>

// or
<selectKey
  keyProperty="id"
  resultType="int"
  order="BEFORE"
  statementType="PREPARED">
  ......
</selectKey>

/// ---
// 实现原理参考:https://cofcool.github.io/tech/2017/11/06/Mybatis-insert-get-id
// 可见 MyBatis 帮我们处理了这种场景
  • MyBatis Plus

Todo 探索 MyBatis Plus 的增强

// MyBatis 的 BaseMapper 接口
com.baomidou.mybatisplus.core.enums.SqlMethod 定义了很多的 SQL 模版,根据模版来自动
生成 SQL 语句

MyBatis 源码分析

MyBatis 初始化流程分析

// SqlSessionFactoryBuilder
// 核心功能:
//  1. XML(XMLConfigBuilder) -> org.apache.ibatis.session.Configuration
//  2. Configuration -> SqlSessionFactory (DefaultSqlSessionFactory)

Configuration 是 Mybatis 的配置类,Mybatis 支持的所有配置都定义在这里

最后更新于