mybatis--源码分析sql的执行过程

源码分析sql的执行过程

0、问题

  • 我们可以通过调用SqlSession接口中的方法实现CRUD操作,那么SqlSession接口中的方法是如何实现的?
  • 分析sqlSession接口中的insert()方法的执行过程,我们进行源码跟踪发现了Mybatis只是对于jdbc的封装。
  • ctrl + alt + b 观察源码实现

1、新增

  • insert()方法的执行过程分析
  • DefaultSqlSession----> return update(statement, parameter);185行
  • 进入DefaultSqlSession—> public int update(String statement, Object parameter) {方法定义 159行
  • 进入198行— return executor.update(ms, wrapCollection(parameter));
  • 找到executor对象的update方法------------查看update()方法-----------------BaseExecutor类的update()方法
  • 进入BaseExecutor类的update()第117行return doUpdate(ms, parameter);
  • 查看doUpdate()方法------------------查看SimpleExecutor类的doUpdate()方法
    在这里插入图片描述
  • 查看doUpdate()方法------------------stmt = prepareStatement(handler, ms.getStatementLog()); 49行
    在这里插入图片描述
  • 查看RoutingStatementHandler类的update()方法
    在这里插入图片描述
  • 查看PreparedStatementHandler类的update方法
    在这里插入图片描述
  • Mybatis的底层一定对jdbc的封装

2、查询

  • findAll()方法的执行过程分析
  • DefaultSqlSession----> return this.selectList(statement, (Object)null);113行
  • 进入DefaultSqlSession—> public List selectList(String statement, Object parameter, RowBounds rowBounds)
  • 方法定义 124行
    在这里插入图片描述
  • 进入124行— this.query();
  • 找到executor对象的query方法------------查看query()方法-----------------BaseExecutor类的query()方法
  • 进入BaseExecutor类的this.queryFromDatabase()第115行return this.query(ms, parameter, rowBounds, resultHandler, key, boundSql);
    在这里插入图片描述
  • 进入BaseExecutor类的this.doQuery(ms, parameter, rowBounds, resultHandler, boundSql)方法。
  • 进入SimpleExecutor类的handler.query(stmt, resultHandler)方法。
    在这里插入图片描述
  • 查看handler.query()的方法
  • 查看PreparedStatementHandler类的query()方法
    在这里插入图片描述
  • 备注:
PreparedStatement对象它的执行方法
​
execute:它能执行CRUD中的任意一种语句,它的返回值是一个boolean类型,表示是否有结果集,有结果集是true,没有结果集是false。
​
executeUpdate:它只能执行CUD语句,查询语句无法执行,它的返回值是影响数据库记录的行数
​
executeQuery:它只能执行SELECT语句,无法执行增删改,执行结果封装的结果集ResultSet对象
  • 点击进去this.resultSetHandler.handleResultSets(ps)
  • 查看DefaultResultSetHandler类的handleResultSets()方法,它是用来封装结果集对象。
    在这里插入图片描述
  • 证明:mybatis底层封装了JDBC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值