openSession源码解析
由下图可知道openSession执行的是openSessionFromDataSource方法
进入openSessionFromDataSource中,openSession的多个重载⽅法可以指定获得的SeqSession的Executor类型和事务的处理。
默认参数介绍
| 方法 | 注释 |
| — | — |
| ExecutorType为Executor | ExecutorType为Executor的类型 |
| TransactionIsolationLevel | TransactionIsolationLevel为事务隔离级别 |
| autoCommit | autoCommit是否开启事务 |
selectList源码解析(举例)
点击selectList方法进入openSession中找到对应的接口类
点接selectList实现类到DefaultSqlSession类中,调用selectList的重载方法
selectList默认参数介绍
| 参数 | 作用 |
| — | — |
| statement | |
| parameter | |
| rowBounds | |
| ResultHandler | |
- configuration.getMappedStatement(statement);
根据传入的statement查询出MappedStatement对象
- executor.query(ms, wrapCollection(parameter), rowBounds, handler)
将查询出的MappedStatement对象和parameter等参数传递给executor.query方法中,委托executor类进行查询操作。
executor.query()方法解析
具体源码实现如下图所示
将Mappedstatement动态获取SQL语句,然后BoundSql封装,然后创建一级缓存,并将参数传递给query的重载方法,如下所示
如果查询的数据一级缓存中有,这直接处理,如果一级缓存中没有,则进行数据库查询,数据库查询源码如下所示:
数据库查询操作调用的是doQuery方法,然后doQuery方法结果返回后,将结果放到缓存中并返回结果
将参数都获取到后,创建JDBC的statement对象,并把statementHandler参数传递给statement对象中进行初始化操作
上述的Executor.query()⽅法⼏经转折,最后会创建⼀个StatementHandler对象,然后将必要的参数传递给StatementHandler,使⽤StatementHandler来完成对数据库的查询,最终返回List结果集。
StatementHandler.parameterize()方法解析
进入StatementHandler类的parameterize(statement)⽅法的实现
从上述的代码可以看到,StatementHandler的parameterize(Statement)⽅法调⽤了ParameterHandler的setParameters(statement)⽅法,ParameterHandler的setParameters(Statement )⽅法负责根据我们输⼊的参数,对statement对象的?占位符处进⾏赋值。
进⼊到StatementHandler的List query(Statement statement, ResultHandler resultHandler)⽅法的实现:
技术学习总结
学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
.(img-CTC1JQI6-1714543293163)]
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
[外链图片转存中…(img-1f6FaJlN-1714543293163)]
[外链图片转存中…(img-XTB2RxK2-1714543293164)]