Spring整合jdbc编程
一、Spring对Jdbc的支持
Spring为了提供对Jdbc的支持,在Jdbc API的基础上封装了一套实现,以此建立一个 JDBC 存取框架。
作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.
二、传统的Jdbc实现
如下为传统的Jdbc实现,该实现有两个明显的缺点就是(1)需要自己管理连接 (2)Jdbc操作重复代码封装与编写
public void save() { try { String sql = "insert into aa(id,name) values(3,'happy');"; Connection con = null; Statement stmt = null; Class.forName("com.mysql.jdbc.Driver"); // 连接对象 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/kk", "root", "123456"); // 执行命令对象 stmt = con.createStatement(); // 执行 stmt.execute(sql); // 关闭 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } }
三、Spring+Jdbc实现
相比于传统的Jdbc实现,在Jdbc API的基础上封装了一套实现JdbcTemplate,JdbcTemplate的优点如下:
(1)配置基于模板设置
(2)完成了资源的创建和释放的工作
(3)完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行,简化了对JDBC的操作
(4)仅需要传递DataSource就可以把它实例化
(5)JdbcTemplate只需要创建一次,减少了代码复用的烦恼
(6)JdbcTemplate是线程安全类
步骤1.配置Spring+JDBC配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- 名称空间 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd "> <!-- 1、声明数据源对象:C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 加载jdbc驱动 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <!-- jdbc连接地址 --> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/kk"></property> <!-- 连接数据库的用户名 --> <property name="user" value="root"></property> <!-- 连接数据库的密码 --> <property name="password" value="123456"></property> <!-- 数据库的初始化连接数 --> <property name="initialPoolSize" value="3"></property> <!-- 数据库的最大连接数 --> <property name="maxPoolSize" value="10"></property> <!-- 数据库最多执行的事务 --> <property name="maxStatements" value="100"></property> <!-- 连接数量不够时每次的增量 --> <property name="acquireIncrement" value="2"></property> </bean> <!-- 创建jdbcTemplate对象 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"> </property> </bean> <bean id="jdbcUser" class="com.jyk.spring.jdbc.JdbcUser"> <property name="jdbcTemplate" ref="jdbcTemplate"> </property> </bean> </beans>
步骤2.通过jdbcTemplate编写对业务的增删改查操作
package com.jyk.spring.jdbc; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; public class JdbcUser { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void save() { String sql = "insert into aa(id,name) values ('4','admin4')"; //使用jdbc模板工具类来简化数据库执行前的操作 jdbcTemplate.update(sql); } public person queryById(String id) { String sql = "select s.name from aa s where s.id=?"; Map<String, Object> map = jdbcTemplate.queryForMap(sql, id); System.out.println(map); return null; } public List<person> queryAll() { String sql = "select * from aa"; return jdbcTemplate.query(sql, new RowMapper<person>(){ @Override public person mapRow(ResultSet rs, int index) throws SQLException { person p = new person(); p.setId(rs.getInt("id")); p.setName(rs.getString("name")); return p; }}); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2017-07-29 学习Zookeeper需要了解的专业名词
2017-07-29 Zookeeper概述和基本概念