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的系列博客< ...
随机推荐
- Gmail Copilot是什么,有什么作用,好不好
Gmail Copilot是一个Chrome浏览器插件,它构建在Gmail之上; 它自动列出你和联系人的所有电子邮件和对话信息: 它是一个小型CRM,可以让你查看联系人的个人信息快照,以及过去的任何邮 ...
- 团队项目-Alpha2版本发布
第五次团队作业 序言 所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign 作业要求 https://w ...
- socket服务
1.socket_server import socket import threading server = socket.socket(socket.AF_INET, socket.SOCK_ST ...
- 14-numpy笔记-莫烦pandas-2
代码 import pandas as pd import numpy as np dates = pd.date_range('20130101', periods=6) df=pd.DataFra ...
- 基于Intel OpenVINO的搭建及应用,包含分类,目标检测,及分割,超分辨
PART I: 搭建环境OPENVINO+Tensorflow1.12.0 I: l_openvino_toolkit_p_2019.1.094 第一步常规安装参考链接:https://docs.op ...
- 学习:逆向PUSH越界/INT 68/反调试导致的程序
自己根据shark恒老师的分析,总结一下: 一般反调试自动关闭程序利用的函数有: 1.CreateToolhelp32Snapshot 2.FindWindow 3.ExitProcess 4.Pos ...
- 知识点总结 JS(ES6)
一.新增数据类型Symbol 概念: Symbol代表独一无二的 Symbol类型的值通过Symbol函数来生成,同时Symbol函数返回的值的唯一的 Symbol函数可以接收字符串作为参数,但是即使 ...
- 第04组 团队Git现场编程实战
组员职责分工 组员 分工 林涛(组长) 分配任务.整理数据.写博客 童圣滔 UI界面制作 林红莲 UI界面制作 潘雨佳 测评出福州最受欢迎的商圈 于瀚翔 测评出福州最受欢迎的商圈 覃鸿浩 测评出福州人 ...
- Salesforce 开发整理(九) 开发中使用的一些小技巧汇总[持续更新]
1.查询一个对象下所有字段 当需要查询一个对象所有字段进行复制或其他操作,可以使用一段拼接的语句来查询 String query = 'select '; for(String fieldApi : ...
- @PostConstruct、@Autowired以及构造函数的执行顺序
结论先行:构造函数 -> PostConstruct -> @Autowired 依次执行 由于项目需要启动时加载一个配置信息,所以想到了用@PostConstruct,如下所示: @Co ...