从源码理解Mybatis及Pagehelper插件

1 Mybatis简介

1.1 简介

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

1.2 官方中文文档

https://mybatis.net.cn/index.html

2 Mybais 源码分析

2.1 源码分析

网上过多,不再重复编写,可参考:MyBatis原理源码

2.2 通过源码得出的细节

2.2.1 properties

  • Properties 解析后存放在org.apache.ibatis.session.Configuration#variables中,数据类型是java.util下基于Hashtable(线程安全)的Properties类;
  • 解析顺序为 property->resource->url。 存在相同的配置,后加载的会覆盖之前加载的

2.2.2 settings

2.2.2.1 defaultScriptingLanguage

动态 SQL 生成使用的默认脚本语言,默认为 org.apache.ibatis.scripting.xmltags.XMLLanguageDriver

  • 源码分析:
public class XMLLanguageDriver implements LanguageDriver {
  /**
  * Creates a ParameterHandler that passes the actual parameters to the the JDBC statement.
  * 创建一个ParameterHandler,它将实际参数传递给JDBC语句(boundSql,getSql 为原始数据)
  * 配置解析阶段,会根据每一个sql,生成对应的ParameterHandler
  * sql执行之前,调用ParameterHandler.setParameters为PreparedStatment设置参数,通过调用对应字段的TypeHandler.setNonNullParameter的方法,设置具体的值,如PreparedStatment.setInt
  */
  @Override
  public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
  	//默认为DefaultParameterHandler 且只有一个实现
    return new DefaultParameterHandler(mappedStatement, parameterObject, boundSql);
  }

  @Override
  public SqlSource createSqlSource(Configuration configuration, XNode script, Class<?> parameterType) {
    XMLScriptBuilder builder = new XMLScriptBuilder(configuration, script, parameterType);
    return builder.parseScriptNode();
  }
  /**
  * 执行sql阶段调用,此时传入的sql的参数已替换为 ? 占位符
  */
  @Override
  public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) {
    // issue #3
    if (script.startsWith("
                    
                    

你可能感兴趣的:(Java/JavaWeb,mybatis,java,mysql)