2024年3月6日
Mybatis MetaObject Author: HuiFer 源码阅读工程: SourceHot-Mybatis 源码位于:org.apache.ibatis.reflection.MetaObject 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84……
阅读全文
2024年3月6日
MapperMethod Author: HuiFer Description: 该文介绍 mybatis MapperMethod 源码 源码地址: org.apache.ibatis.binding.MapperMethod,核心方法是execute 源码阅读工程: SourceHot-Mybatis 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 /** * CRUD 不同的执行……
阅读全文
2024年3月6日
Mybatis DyanmicSqlSourcce Author: HuiFer 源码阅读工程: SourceHot-Mybatis org.apache.ibatis.scripting.xmltags.DynamicSqlSource org.apache.ibatis.scripting.xmltags.DynamicContext.DynamicContext 1 2 3 4 5 6 7 8 9 <select id="list" resultType="com.huifer.mybatis.entity.HsSell"> select * from hs_sell <trim prefix="WHERE" prefixOverrides="AND |OR"> <if test="ID != null"> and ID = #{ID,jdbcType=INTEGER} </if> </trim> </select> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class MixedSqlNode implements SqlNode { private final List<SqlNode> contents; public MixedSqlNode(List<SqlNode> contents) { this.contents = contents; } @Override public boolean apply(DynamicContext context) { // 调用 salNode 对象本身的 apply 方法解析 sql contents.forEach(node -> node.apply(context)); return true; } } 根据 mapper.xml 文件中的代码流程 需要走 org.apache.ibatis.scripting.xmltags.StaticTextSqlNode#apply org.apache.ibatis.scripting.xmltags.TrimSqlNode#apply org.apache.ibatis.scripting.xmltags.IfSqlNode#apply 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18……
阅读全文
2024年3月6日
Mybatis DataSource Author: HuiFer Description: 该文介绍 mybatis DataSource 源码 源码阅读工程: SourceHot-Mybatis org.apache.ibatis.datasource.DataSourceFactory 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /** * 数据源工厂 * @author Clinton Begin */ public interface DataSourceFactory { /** * 设置 dataSource 属性 * @param props */ void setProperties(Properties props); /** * 获取 dataSource * @return {@link DataSource} */ DataSource getDataSource(); } 类图如下 setProperties会将下列标签放入datasource中 1 2 3 4 5 6 <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/> <property name="username" value="mybatis"/> <property name="password" value="mybatis"/>……
阅读全文
2024年3月6日
Mybatis Cursor Author: HuiFer Description: 该文介绍 mybatis Cursor 源码 源码阅读工程: SourceHot-Mybatis Cursor 源码位置:org.apache.ibatis.cursor.Cursor 继承Iterable说明是一个迭代器,继承Closeable说明有一个东西需要关闭 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public interface Cursor<T> extends Closeable, Iterable<T> { /** * 游标开始从数据库……
阅读全文
2024年3月6日
Mybatis Alias Author: HuiFer Description: 该文介绍 mybatis Alias 源码 源码阅读工程: SourceHot-Mybatis 源码位置 :org.apache.ibatis.type.Alias 与 Alias 相关的一个方法org.apache.ibatis.type.TypeAliasRegistry.registerAlias(java.lang.String, java.lang.Class<?>)(别名注册) 1 2……
阅读全文
2024年3月6日
SqlSession 是 MyBatis 核心接口之一,也是 MyBatis 接口层的主要组成部分,对外提供 MyBatis 常用的 API。mybatis 提供了两个 SqlSession 接口的实现,分别为 DefaultSqlSession、SqlSessionManager,其中最常用的是 DefaultSqlSession。另外,跟前面分析过的源码 mybatis 的源码一样,my……
阅读全文
2024年3月6日
Executor 是 MyBatis 的核心接口之一,其中定义了数据库操作的基本方法。在实际应用中经常涉及的 SqISession 接口的功能,都是基于 Executor 接口实现的。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 public interface Executor { ResultHandler NO_RESULT_HANDLER = null; // 执行update、insert、delete三种类型的SQL语句……
阅读全文
2024年3月6日
StatementHandler 接口是 MyBatis 的核心接口之一,它完成了 MyBatis 中最核心的工作,也是 Executor 接口实现的基础。 StatementHandler 接口中的功能很多,例如创建 Statement 对象,为 SQL 语句绑定实参,执行 select、insert、update、delete 等多种类型的 SQL 语句,批量执行 SQL 语句,将结果集映射成结果对象。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17……
阅读全文
2024年3月6日
ResultSetHandler 是 MyBatis 中用来处理 JDBC ResultSet 对象的接口。ResultSetHandler 的作用是将 ResultSet 对象转化为用户需要的形式,例如 POJO、Map 或者是自定义的对象。ResultSetHandler 是 MyBatis 中非常重要的一个组件,它负责将数据库查询结果转化为用户需要的 Java 对象。 在 MyBatis 中,每次执行数据库查询操作时,……
阅读全文