当前位置: 首页 > news >正文

JDBC模板技术

JdbcTemplate 是 Spring 框架提供的核心 JDBC 工具类,用于简化数据库操作。它封装了 JDBC 的繁琐流程(如连接管理、SQL 执行、结果集处理等),让开发者更专注于业务逻辑,而非模板代码。

一、核心作用

  1. 自动管理连接:无需手动创建 / 关闭 ConnectionStatementResultSet,避免连接泄漏。
  2. 简化 SQL 执行:提供便捷方法执行增删改查、批量操作等。
  3. 统一异常处理:将 JDBC 的 SQLException 转换为 Spring 统一的 DataAccessException 体系,便于异常处理。
  4. 防 SQL 注入:默认支持参数化查询(? 占位符),避免注入风险。

二、基本使用步骤

1. 依赖配置
  • 引入依赖(Maven):

    xml

    <!-- Spring JDBC 核心依赖 -->
    <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.20</version> <!-- 版本根据实际情况选择 -->
    </dependency>
    <!-- 数据库驱动(以 MySQL 为例) -->
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version>
    </dependency>
    <!-- 连接池(如 Druid) -->
    <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version>
    </dependency>
    
  • 配置数据源和 JdbcTemplate(Spring XML 配置):

    xml

    <!-- 1. 配置数据源(Druid 连接池) -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="123456"/>
    </bean><!-- 2. 配置 JdbcTemplate,注入数据源 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/>
    </bean>
    
2. 注入 JdbcTemplate

在业务类(如 Service 或 Dao)中通过依赖注入获取 JdbcTemplate 实例:

@Service
public class UserService {// 注入 JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;// 业务方法中使用 jdbcTemplate 操作数据库
}

三、常用方法及示例

1. 增删改操作(update()

用于执行 INSERTUPDATEDELETE,返回受影响的行数。

  • 新增数据

    public int addUser(User user) {String sql = "INSERT INTO user (name, age) VALUES (?, ?)";// 参数:SQL 语句 + 占位符对应的参数列表return jdbcTemplate.update(sql, user.getName(), user.getAge());
    }
    
  • 修改数据

    public int updateUserAge(Long id, int newAge) {String sql = "UPDATE user SET age = ? WHERE id = ?";return jdbcTemplate.update(sql, newAge, id);
    }
    
  • 删除数据

    public int deleteUser(Long id) {String sql = "DELETE FROM user WHERE id = ?";return jdbcTemplate.update(sql, id);
    }
    
2. 查询操作(query() 系列)

用于执行 SELECT,需通过 RowMapper 或 ResultSetExtractor 将结果集映射为 Java 对象。

  • 查询单条记录(queryForObject()

    public User getUserById(Long id) {String sql = "SELECT id, name, age FROM user WHERE id = ?";// RowMapper:将 ResultSet 的一行映射为 User 对象return jdbcTemplate.queryForObject(sql, new RowMapper<User>() {@Overridepublic User mapRow(ResultSet rs, int rowNum) throws SQLException {User user = new User();user.setId(rs.getLong("id"));user.setName(rs.getString("name"));user.setAge(rs.getInt("age"));return user;}}, id); // 最后一个参数是 SQL 占位符的值
    }
    
  • 查询多条记录(query()

    public List<User> getAllUsers() {String sql = "SELECT id, name, age FROM user";return jdbcTemplate.query(sql, new RowMapper<User>() {@Overridepublic User mapRow(ResultSet rs, int rowNum) throws SQLException {User user = new User();user.setId(rs.getLong("id"));user.setName(rs.getString("name"));user.setAge(rs.getInt("age"));return user;}});
    }
    
  • 查询单个值(如数量、总和)

    public int getUserCount() {String sql = "SELECT COUNT(*) FROM user";// 返回值类型为 Integer.classreturn jdbcTemplate.queryForObject(sql, Integer.class);
    }
http://www.dtcms.com/a/594316.html

相关文章:

  • 万网网站后台登陆做网站哪个部分
  • 11月10日学习总结--numpy的基本操作
  • 快速搭建一个 GitHub 开源项目导航网站,提供便捷的信息抓取、智能摘要、分类管理功能
  • 网站数据表怎么做网络推广引流方式
  • 【Rocky基础】——用户管理
  • 免费下载建筑图纸的网站wordpress子分页
  • 数据结构简明教程(李春葆版)课后习题答案
  • 做app网站公司名称如何网络推广新产品
  • CSGHub v1.12.0开源版本更新
  • 上海网站建设报价自建网站怎么做推广
  • Vue Router (编程式导航)
  • 特斯拉 Tesla 面试经验分享|流程全解析 + 技术细节 + 面试感受
  • .net网站开发面试网站平台定制开发
  • 网站制作公司咨询工作内容个人做网站可以盈利么
  • 【Unity】MMORPG游戏开发(十)断线恢复
  • 深圳app开发公司哪家服务好网站建设丶seo优化
  • C#/.NET/.NET Core技术前沿周刊 | 第 期(年.-.)
  • 手机网站标准自助建站系统哪个好用
  • 科技赋能文博传播 众趣科技引领数字博物馆虚拟展厅新生态
  • 科技驱动服务升级 榕树钱小乐的创新发展之路
  • 如何系统提升英文科技文献阅读能力:方法、工具与 30 天训练计划
  • 网站开发费用摊销时间深圳 网站公司
  • 网站建设案例方案做ppt卖给网站
  • 银行App关停潮下的物联网破局:从“数量冗余“到“智慧集约“
  • 文献分享日报15
  • 为什么最近好多网站维护南通市网站
  • 西亚网站建设科技江西省建设监理协会网站
  • kubernetes的包的管理--helm
  • opencv 学习: 06 使用指针遍历像素,以均匀颜色量化为例
  • 网站改版 被百度k网页设计素材 旅游