手写Mybatis

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

手写Spring
手写SpringBoot
手写Mybatis

一、代码1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、代码3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、小总结

1、jdbc的写法引出全部。并且从注解的写法并非xml中sql的写法入手。
2、代理工厂来获取UserMapper接口的实现类,并调用接口的方法实现方法上的SQL内容。
代理工厂就是核心类,里面getMapper就是核心方法了,以Proxy.newProxyInstance开始一切。里面依据jdbc来贾连欲执释,加载驱动和连接数据库以及最后的释放 连接都和jdbc一样比较简单。预编译的逻辑就非常复杂了。
3、预编译逻辑:
PreparedStatement statement = connection.prepareStatement(parseSql);
statement.setString(i,“fe”);
根据上面的语句,第一要将#{userName}变换为?占位符这种SQL;第二要知道设置参数的字段类型,是String,还是其他类型;
第三要知道设置的是i是第几个参数;第四要对应的知道设置的i第几个参数是第几个值。
对应第一:通过自定义注解@Select能拿到具体的SQL,SQL中#{userName},通过解析器GenericTokenParser更换为了?
对应第二:引入了TypeHandler类型处理器,Map<Class,TypeHandler> typeHandlerMap将提前定义好java8种类型,并初始化存储好。巧妙的利用了Class是String或者是Integer来跟进提前定义好的8 种类型,给予String就赋值字符串,Integer就赋值int值,完美解决statement.setString(i,“fe”)这个语法和类型对应问题。
对应第三:还是通过解析器中的handler截获并记录到 List parameterMappings ,里面主要有property属性,记录了#{userName}中userName这个名称。
对应第四:fori循环parameterMappings的时候,字段类型,第几个,参数设置结合上面的,都能确定好。并且引入了@Param来多个参数和形参对应和#{}对应。
4、返回结果处理,也运用了精巧的写法。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝影铁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值