小马哥的 Java 项目实战营学习笔记(1)

小马哥的 Java 项目实战营

第二节:数据存储之 JDBC

数据源

接口 – javax.sql.DataSource
获取方式

1、普通对象初始化
1)Spring Bean
2)API 实现

2、JNDI 依赖查找

主流 DataSource 实现

1、Apache DBCP 1/2
间接依赖 – Apache Commons Pool

2、对象池的概念

1)”池”化 – “肉少狼多”,”肉”就是资源,”狼”就是”消
费者”
2)特点:有借有还
3)核心编程思想:生产者/消费者模型
4)资源:线程资源、数据库资源、I/O 资源
5)举例:线程池、数据库连接池

3、C3P0(字节码提升/优化)
4、Alibaba Druid(字节码提升/优化)

_
JDBC 驱动管理_

驱动接口 – java.sql.Driver

驱动管理器接口 – java.sql.DriverManager

管理器角色

获取 Driver 实现

前提:数据库驱动 Driver 实现会显示地调用
java.sql.DriverManager#registerDriver 方法

1)通过 ClassLoader 加载 Drvier 实现(用户/应用控制)
2)通过 Java SPI ServiceLoader 获取 Driver 实现
加载顺序与 Class Path 的顺序有关系

3)通过 “jdbc.drivers” 系统属性


加载顺序和属性值的顺序有关系


通过读取”jdbc.drivers” 系统属性后,再经过 “:” 的分割,尝
试获取多值,再通过 ClassLoader 加载对应的实现类


ServiceLoader 会初始化 Driver 实现类(应用主动配置),
包含 Class 加载。

_
获取 Connection
通过 ClassLoader 类加载数据库 JDBC Driver 实现类的方
式,增加 java.sql.DriverManager#registeredDrivers 字段
的元素,然后通过迭代的方式逐一 尝试 getConnection 方法
参数的 JDBC URL 是否可用。_

_
问题集合
1)当多个 Driver 同时被加载到 ClassLoader 后,到底用了哪
个?
getConnection 方法是通过 JDBC URL 判断的,通过迭代多
次,返回第一个成功的 Connection 实例
2) java.sql.DriverManager#loadInitialDrivers 方法中 Java
SPI 空便利的意义在哪里?_

ServiceLoader#next() 方法会主动触发 ClassLoader 加
载。

_
数据连接接口 – java.sql.Connection_

_
相近语义术语_


一个 JDBC Connection 相当于 MyBatis Session 或者
Hibernate Session

_
创建 SQL 命令 – Statement_

_
SQL 命令接口 – java.sql.Statement

_ 主要类型 1)普通 SQL 命令 – java.sql.Statement
2)预编译 SQL 命令 – java.sql.PreparedStatement
3)存储过程 SQL 命令 – java.sql.CallableStatement

_
DDL 语句和 DML 语句_


1、DML 语句 :CRUD
R:java.sql.Statement#executeQuery
_ _CUD:
java.sql.Statement#executeUpdate(java.lang.String)
2、DDL 语句
java.sql.Statement#execute(java.lang.String)
1)成功的话,不需要返回值(返回值 false)
2)失败的话,SQLException


SQL 执行结果接口 – java.sql.ResultSet
ResultSet 元数据接口 –
java.sql.ResultSetMetaData

列的个数、名称以及类型等


SQL 执行异常 – java.sql.SQLException
基本特点

1、几乎所有的 JDBC API 操作都需要 try catch
java.sql.SQLException
2、java.sql.SQLException 属于检查类型异常,继承
_ _Exception

事务保护点接口 – java.sql.Savepoint


事务
I
NSERT(S) -> UPDATE(F) -> 回滚
INSERT(S) -> UPDATE(S) -> INSERT(F)
_ _T1 T2

嵌套事务
T0 = T1 + T2
java.sql.Connection#setSavepoint(java.lang.String)
Savepoint t2 = connection.setSavepoint(“T2”);
t2.

Native SQL

数据源(DataSource)

多数据库源(Multiple DataSources)
1、N 个 DataSources
2、DataSource 代理
1)Druid

MyBatis

MyBatis Generator 通过数据库表结构生成 Java 代码和 SQL
Mapper

JPA

相关资料

A -> B -> C -> D -> E
-> Exception -> E

作业
要求
1、通过自研 Web MVC 框架实现(可以自己实现)一个用户
注册,forward 到一个成功的页面(JSP 用法)
1)/register
2、通过 Controller -> Service -> Repository 实现(数据库实
现)
3、(非必须)JDNI 的方式获取数据库源(DataSource),
在获取 Connection

4、通过 GraalVM 将一个简单 Spring Boot 工程构建为 Native Image,要求:

代码要自己手写 @Controller @RequestMapping(“/helloworld”)
相关插件可以参考 Spring Native Samples
(可选) 理解 Hint 注解的使用

Original: https://www.cnblogs.com/itit9696/p/15119033.html
Author: cml46679910
Title: 小马哥的 Java 项目实战营学习笔记(1)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/579360/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JavaSE——调试

    Loading 多动手,多思考,变量和方法写注释!!! idea中ctrl+alt+l失效 解决办法:关闭应用中的快捷键 不换行输出数据 创建包不能添加java 解决,改成中文看看…

    Java 2023年6月6日
    093
  • 使用 Certbot 申请 Let’s Encrypt SSL 证书,并定时续期

    网站有个 SSL 证书,可以提高安全性、及提高搜索引擎的排名。Let’s Encrypt SSL 证书是免费的,可以用命令行申请,也可以用命令行续期。 Let&#821…

    Java 2023年6月9日
    069
  • SpringCloud 学习总结

    SpringCloud 学习总结 学习回顾 1.Maven依赖管理 ​ 在微服务项目中,我们一般是先创建一个父项目模块对整个项目的依赖进行版本限定和依赖控制,子模块继承父模块后,不…

    Java 2023年6月8日
    094
  • Ribbon

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均&#x8…

    Java 2023年6月8日
    076
  • nginx 文档

    https://skyao.gitbooks.io/learning-nginx/content/documentation/HTTP_load_balancer.html htt…

    Java 2023年5月30日
    067
  • idea通过类图查看类

    右键点Jump to Source或者直接单击然后按F4 Original: https://www.cnblogs.com/recorderM/p/15991971.htmlAu…

    Java 2023年6月5日
    072
  • 后端编写Swagger接口管理文档

    在后端开发当中,编写好多个接口后需要通过注解编写相应的接口文档提供给前端调用接口实现前后端分离。 Swagger接口管理文档 访问接口文档的网页:http://localhost:…

    Java 2023年6月14日
    085
  • 如何使用html制作简历

    今天跟大家分享一下,如何制作简历页面 从图片可以观察到,头部”个人简历”使用那几个常用的文本标签或者 , 即可;简历里有很多的栏,这就需要用到table标签…

    Java 2023年6月8日
    082
  • 设计模式 — Strategy(策略模式)

    Strategy(策略模式) 定义一系列算法,把他们一个个封装起来,并且是他们可以互相替换(变化)。该模式似的算法可以独立于使用它的客户程序(稳定的)而变化(扩展,子类) 动机(M…

    Java 2023年6月16日
    076
  • Java学习笔记(韩顺平教育 b站有课程)

    Java学习地址 视频地址 真的很推荐大家去听老韩的课(非常细谁听谁知道):【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_bilibili 使用心得 说一下…

    Java 2023年6月5日
    098
  • 互联网最值得加入的 173 家国企汇总,真心强!!

    来源:www.zhihu.com/question/285730093/answer/2506491786 最近招人,拿的简历一沓一沓。 今年的就业形势,实在是严峻。社招都这样,更…

    Java 2023年6月15日
    096
  • Spring 拦截器

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 总…

    Java 2023年6月7日
    074
  • 【转载】VMware虚拟机NAT模式网络配置图文教程

    原文:https://blog.csdn.net/dingguanyi/article/details/77829085 一、引言在Windows上搭建集群实验环境时,为能够让集群…

    Java 2023年5月30日
    0113
  • CentOS 7替换默认软件源

    安装CentOS 7后,默认源在国外,可以替换为国内的源以提升访问速度 参考https://mirrors.ustc.edu.cn/help/centos.html sudo vi…

    Java 2023年6月13日
    071
  • 11、SpringBoot 启动 刷新应用上下文 自动装配解析(三)

    目录:Springboot源码学习目录上文:10、SpringBoot 启动 刷新应用上下文 自动装配解析(二)前言: 配置类解析核心类关系图 配置类的解析其实是Spring的重点…

    Java 2023年6月13日
    074
  • SpringBoot加载资源方式及默认顺序

    注意:因为文件内容可能被覆盖,因此文件应用在项目中的优先级与文件的加载顺序相反。 一、同文件夹下加载properties文件和yml文件 springboot会首先加载类路径下的a…

    Java 2023年6月13日
    068
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球