手把手带你写一个 MiniSpring
郭屹
前 Sun Microsystems Java 研发工程师,开源软件 MiniSpring、MiniTomcat 开发者
6170 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 26 讲
手把手带你写一个 MiniSpring
15
15
1.0x
00:00/00:00
登录|注册

13|JDBC访问框架:如何抽取JDBC模板并隔离数据库?

你好,我是郭屹,今天我们继续手写 MiniSpring。从这节课开始我们进入 MiniSpring 一个全新的部分:JdbcTemplate。
到现在为止,我们的 MiniSpring 已经成了一个相对完整的简易容器,具备了基本的 IoC 和 MVC 功能。现在我们就要在这个简易容器的基础之上,继续添加新的特性。首先就是数据访问的特性,这是任何一个应用系统的基本功能,所以我们先实现它。这之后,我们的 MiniSpring 就基本落地了,你真的可以以它为框架进行编程了。
我们还是先从标准的 JDBC 程序开始探讨。

JDBC 通用流程

在 Java 体系中,数据访问的规范是 JDBC,也就是 Java Database Connectivity,想必你已经熟悉或者至少听说过,一个简单而典型的 JDBC 程序大致流程是怎样的呢?我们一步步来看,每一步我也会给你放上一两个代码示例帮助你理解。
第一步,加载数据库驱动程序。
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
或者直接 new Driver(); 也可以。
这是第一步,因为 JDBC 只是提供了一个访问的 API,具体访问数据库的工作是由不同厂商提供的数据库 driver 来实现的,Java 只是规定了这个通用流程。对同一种数据库,可以有不同的 driver,我们也可以自己按照协议实现一个 driver,我自己就曾在 1996 年实现了中国第一个 JDBC Driver。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何通过抽取JdbcTemplate来实现JDBC访问框架的技术特点。首先介绍了JDBC的通用流程,包括加载数据库驱动程序、获取数据库连接、创建Statement对象、执行SQL语句、操作ResultSet结果集以及回收数据库资源的流程。然后,提出了抽取JdbcTemplate的基本思路,即动静分离,将固定的套路作为模板定下来,变化的部分让子类重写。通过示例代码,展示了如何实现JdbcTemplate抽象类,并在子类中实现具体的业务逻辑处理。强调了这种结构的实用性,能够将JDBC程序流程固化下来,分离出变化的部分,让应用程序员只需要管理SQL语句并处理返回的数据。另外,还介绍了Callback模式的应用,通过回调函数作为参数传递,简化了业务实现类的编写。最后,结合IoC容器,展示了如何将JdbcTemplate定义为一个Bean,通过@Autowired自动注入,剥离了应用程序中与数据库访问相关的代码。整体而言,本文通过实际代码示例生动地展示了如何抽取JdbcTemplate并隔离数据库的技术特点,为读者提供了快速了解JDBC访问框架的概览。文章通过模板化、Callback模式和IoC容器的叠加手段,简化了数据库操作,重构了数据访问的程序结构,同时抽取出了数据源的概念,包装connection,让应用程序和底下的数据库分隔开。文章还提出了一道思考题,引发读者思考和交流。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 MiniSpring》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • peter
    请教老师几个问题: Q1:JDBC driver复杂吗?代码规模一般多大?能否以加餐形式讲一下driver? Q2:JDBC Template还有用吗? 现在一般的开发都是SSM或SSH,不会用JDBC Template。 Q3:JDBC template能支持多大并发? 用JDBC template的话,一个数据库实例,比如一个mysql实例,能支持多大的并发量?200?

    作者回复: driver基础功能也不是很复杂,主要是了解数据库系统提供的api,现代数据库都提供了java api,就更简单了。我那个时候只有c语言的api,所以还要用JNI技术来做。基础功能c代码记得我就几千行。 jdbc template很少直接使用了,一般用mybatis或者jpa,但是也有系统是用的。我个人认为了解jdbc template很有好处。这个话题比较大,见解不同,我自己不是很支持orm技术。我的观点,因为底下的数据库系统是关系模型,是一种代数演算,跟对象模型天然有隔,一味进行orm,我觉得是对面向对象的滥用。我在我的《认识编程》一书中讲到了这个观点。 数据库并发数,跟jdbc template关系不大,是数据库系统和缓存系统主要决定的,实际上,包装越少性能越好,jdbc template就是一层薄薄的包装。

    2023-04-11归属地:北京
    7
  • 云从
    如果本地测试能够连接mysql 但是tomcat中可连接不上的话 看看tomcal lib 下面有没有mysql 的驱动

    作者回复: 自己放一个mysql jar包就行

    2023-06-21归属地:四川
  • 马儿
    实现dml语句如果只是简单的实现就像最初的那一版拼接sql就可以实现了,但是这样的话需要每次更新都手动拼接sql比较麻烦。如果想要传入相应的对象就更新,可以利用本节课的callback来实现将相应的对象字段转换为sql语句的过程。但是这节课的结果可能整体上离最终感知不到sql还比较远,如果需要完全不感知sql应该是用一个类专门负责根据类属性的注解来自动映射。

    作者回复: 目标不同,jdbc template不是为了完全不感知sql。minispring没有讨论orm这个议题。

    2023-04-11归属地:四川
  • C.
    前几天有点忙,这次补齐了。https://github.com/caozhenyuan/mini-spring.git。请看jdbc1、2、3分支
    2023-04-27归属地:江苏
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部