spring第9课,spring对DAO的支持
翻了一下,上一次的学习时间还是2025-06-18。中断的原因,准备银从考试2个星期,准备公司考试2个星期,出差2个星期,小孩暑期过来玩2个星期。2个月一晃而过。。。
第一节:Spring 对 JDBC 的支持(JDBC是最原始的连接DB的技术)
1,配置数据源 dbcp;
(Database Connection Pool)数据库连接池技术的实现库,属于Apache Commons项目子模块。
优势:
- 预初始化固定数量的数据库连接(
initialSize
) - 复用空闲连接(减少90%+的连接创建开销)
- 动态伸缩连接池(
maxActive
,minIdle
控制上下限) 典型应用场景(传统Java Web项目-SSH/SSM框架整合):
Spring配置文件中声明BasicDataSource
注入到SqlSessionFactory
- Tomcat等应用服务器内嵌DBCP作为默认连接池(旧版本)
短板
- 性能瓶颈
- 锁竞争激烈(
synchronized
全局锁)导致高并发下TPS骤降 - 连接回收算法落后(LRU策略 vs HikariCP的FastList优化)
- 锁竞争激烈(
- 监控能力缺失
- 无实时连接数/等待数统计
- 无法追踪SQL执行链路(对比Druid的SQL防火墙功能)
- 容器化支持弱
- 缺乏K8s环境下的自动扩缩容机制
- 替代者:druid
2,使用模板 JdbcTemplate;(原来的一些连接,抛异常等处理被spring封装了)
bean.xml定义时多引入下context空间的内容
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"
定义数据源连接池
<!-- 定义 dataSource--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>