SpringJDBC源码解析
读完本篇文章需要很长很长时间。。。。
传统JDBC
相信大家对传统的jdbc已经很熟悉了,无非就是下面这个流程
1 |
//1.加载驱动程序 |
使用SpringJDBC
引入maven依赖
1 |
<dependency> |
实体类
1 |
public class User {
|
返回值处理类
1 |
public class UserRowMapper implements RowMapper {
|
业务处理类
1 |
public interface JDBCService {
|
配置类
1 |
@Configuration |
启动类
1 |
public class JDBCDemo {
|
至此Deno工程搭建完毕,有需要源码的同学可以从下方地址获取
https://github.com/shiyujun/spring-framework
update
我们首先来分析一下update方法的实现
参数封装
1 |
public int update(String sql, @Nullable Object... args) throws DataAccessException {
|
可以看到,首先使用了ArgPreparedStatementSetter对参数进行了一层封装,然后又使用了SimplePreparedStatementCreator对SQL进行了封装
核心逻辑
1 |
protected int update(final PreparedStatementCreator psc, @Nullable final PreparedStatementSetter pss) |
上方这个方法是update的核心逻辑了,这里面的代码不是太多,主要涉及几个核心的逻辑
获取更新条数updateCount
进入方法以后可以看到这个方法是对execute方法的integer返回值的一个封装,也就是此次修改的行数
1 |
private static int updateCount(@Nullable Integer result) {
|
前置方法execute
这里完成了传统JDBC的前两步加载驱动和获取连接,
1 |
public <T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action) |
执行更新
现在就进入了最后的逻辑了
1 |
protected int update(final PreparedStatementCreator psc, @Nullable final PreparedStatementSetter pss) |
请求参数设置
1 |
public void setValues(PreparedStatement ps) throws SQLException {
|
至此update方法更新分析完毕
query
1 |
public <T> List<T> query(String sql, @Nullable Object[] args, |
首先最外层的result方法没有什么特别的,就是对返回值的处理
1 |
private static <T> T result(@Nullable T result) {
|
参数封装
接着同样是封装请求参数
1 |
public <T> T query(String sql, @Nullable Object[] args, ResultSetExtractor<T> rse) throws DataAccessException {
|
核心查询
1 |
public <T> T query( |
处理返回值
因为修改的时候只需要返回一个int值修改的条数就ok了,但是查询的时候各种查询的类型什么的就不一样了。所以在这需要单独处理一下
1 |
@Override |
SpringJDBC源码解析的更多相关文章
- Spring源码解析系列汇总
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...
- SpringBoot 源码解析 (九)----- Spring Boot的核心能力 - 整合Mybatis
本篇我们在SpringBoot中整合Mybatis这个orm框架,毕竟分析一下其自动配置的源码,我们先来回顾一下以前Spring中是如何整合Mybatis的,大家可以看看我这篇文章Mybaits 源码 ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- jQuery2.x源码解析(缓存篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- jQuery2.x源码解析(构建篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客< ...
随机推荐
- 登录-退出,在T分钟实现BC次用户登录退出,单次登录-退出%90用户时间t,需要的并发用户(线程)
聚合报告%90响应时间:%90用户响应时小于该值 2种理解方式: 一. 1s可完成的用户1/t: T分钟完成的用户T *(1/t); BC次用户需要的线程数Thread= BC/(T*(1/t)) = ...
- 201871010135 张玉晶《面向对象程序设计(java)》第十六周学习总结
第一部分:总结教材14.1-14.3知识内容 并发 • 线程的概念 • 中断线程 • 线程状态 • 多线程调度 • 线程同步 一.线程的概念 1. 程序是一段静态的代码,它是应用程序执行的蓝本. 2. ...
- JAVA并发-CountDownLatch
源码: 内部类Sync private static final class Sync extends AbstractQueuedSynchronizer { private static fina ...
- scp、rsync、xsync
scp. 拷贝完全相同 scp -r etc/hadoop/dfs.hosts root@192.168.121.134:/usr/local/hadoop/hadoop-2.7.6/etc/hado ...
- MySQL实战45讲学习笔记:第十六讲
一.今日内容概要 在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求.还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 ...
- 微信小程序如何进行本地调试
1.下载并使用微信开发者工具 2.将项目导入工具 3.在项目中修改请求http地址 4.在工具上点击“测试号”,跳转到测试号管理界面设置request合法域名. 注意这里输入的测试域名要和上一步相同. ...
- git取消【删除】已经提交的文件(夹)跟踪
git rm -r --cached <fold> 不删除本地文件 git rm -r --f <fold> 删除本地文件 git rm --cached <file&g ...
- String.format方法使用-浅析(转)
转自 https://blog.csdn.net/u010137760/article/details/82869637 1.代码中简单使用2.源码调用的方法3.相关类-Formatter3.1可选 ...
- windows下xshell连接虚拟机的CentOS 7
1.虚拟机设置 2.虚拟机的“编辑”-“虚拟网络编辑器” 3.windows 中运行“cmd”,输入“ipconfig”查看ip,避免冲突 4.在虚拟机网络编辑器界面中,选择“VMnet8” 5.记住 ...
- Android 5.0以下系统支持TLS 1.1/1.2协议版本
一.背景 项目中,客户端与服务端之间普遍使用Https协议通信,突然接到测试同事反馈Android5.0以下手机上,App测试服使用出现问题,出现SSL handshake aborted错误信息,但 ...