Mybatis源码分析和sql解析

本文深入探讨Mybatis的动态SQL解析,包括MappedStatement、SqlSource和DynamicContext的角色。MappedStatement表示XML中的SQL语句节点,SqlSource根据参数动态计算SQL,DynamicContext则将参数对象转换为统一访问方式。Mybatis利用Ognl进行动态计算,实现根据用户参数执行定制化的SQL语句并封装结果。
摘要由CSDN通过智能技术生成

mybatis支持定制化sql和储存过程和高级映射的持久层框架。它简化了程序员的操作,避免了几乎所有的JDBC代码以及手动设置参数和获取结果集。下面就开启Mybatis动态sql解析之旅。

在上一篇mybatis hello world文章中,我们可以看到mybatis把动态sql与jdbc以及框架配置分别了出来。分别为配置文件BlogMapper.xmlmybatis-config.xml。mybatis的所有功能都是围绕着这两个配置文件来的。今天我们就来探究一下mybatis中是如何保存BlogMapper.xml并动态把它解析成执行数据库操作的sql的。

1、MappedStatement

MappedStatement类在Mybatis框架中用于表示XML文件中一个sql语句节点,即一个<select /><update />或者<insert />等标签。mybatis框架会在初始化的时候读取这个配置文件。将其中的sql语句节点解析成一个个的MappedStatement对象。

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="org.mybatis.example.BlogMapper"><selectid="selectBlog"resultType="org.mybatis.example.Blog">
        select * from Blog where id = #{id}
    </select></mapper>123456789

mybatis对上面这个文件进行解析之后,会注册一个MappedStatement就是id为selectBlog这个xml片段。可以通过Configuration中的getMappedStatement(String id)来获取。为了避免id重复,mybatis以namespace为前缀,然后加上节点本身的id值。如果要想在Configuration中获取到这个MappedStatement就需要id是org.mybatis.example.BlogMapper.selectBlog。

打开MappedStatement对象的源码,看一下其中的私有属性。

private String resource;
  private Configuration configuration;
  private String id;
  private Integer fetchSize;
  private Integer timeout;
  private StatementType statementType;
  private ResultSetType resultSetType;
  private SqlSource sqlSo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值