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

Spring JDBC模板

Spring JDBC模板(JdbcTemplate)是Spring框架提供的一个简化JDBC操作的工具类。它封装了JDBC的常见操作,如查询、更新、插入和删除等,简化了数据库访问代码,减少了样板代码。下面是一个详细的示例,展示如何使用Spring JDBC模板进行数据库操作。

核心概念

  1. JdbcTemplate:Spring提供的一个工具类,用于简化JDBC操作。
  2. DataSource:数据源,用于获取数据库连接。
  3. RowMapper:用于将结果集的每一行映射到一个Java对象。

示例代码

1. 配置数据源和JdbcTemplate

首先,我们需要配置数据源和JdbcTemplate。可以使用Spring的Java配置类来完成。

package com.example.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;import javax.sql.DataSource;@Configuration
public class AppConfig {@Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");dataSource.setUsername("username");dataSource.setPassword("password");return dataSource;}@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource) {return new JdbcTemplate(dataSource);}
}
2. 定义实体类

定义一个实体类,用于映射数据库表中的数据。

package com.example.model;public class User {private int id;private String name;private String email;// Getters and setterspublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}
3. 定义DAO类

定义一个DAO类,使用JdbcTemplate进行数据库操作。

package com.example.dao;import com.example.model.User;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;@Repository
public class UserDao {private final JdbcTemplate jdbcTemplate;public UserDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}// 插入用户public void addUser(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getName(), user.getEmail());}// 查询所有用户public List<User> getAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new UserRowMapper());}// 根据ID查询用户public User getUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new UserRowMapper(), id);}// 更新用户public void updateUser(User user) {String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());}// 删除用户public void deleteUser(int id) {String sql = "DELETE FROM users WHERE id = ?";jdbcTemplate.update(sql, id);}// RowMapper实现类private static class UserRowMapper implements RowMapper<User> {@Overridepublic User mapRow(ResultSet rs, int rowNum) throws SQLException {User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setEmail(rs.getString("email"));return user;}}
}
4. 测试类

定义一个测试类,演示如何使用UserDao进行数据库操作。

package com.example;import com.example.config.AppConfig;
import com.example.dao.UserDao;
import com.example.model.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;import java.util.List;public class Main {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);UserDao userDao = context.getBean(UserDao.class);// 添加用户User user = new User();user.setName("John Doe");user.setEmail("john.doe@example.com");userDao.addUser(user);// 查询所有用户List<User> users = userDao.getAllUsers();for (User u : users) {System.out.println("User ID: " + u.getId() + ", Name: " + u.getName() + ", Email: " + u.getEmail());}// 根据ID查询用户User userById = userDao.getUserById(1);System.out.println("User ID: " + userById.getId() + ", Name: " + userById.getName() + ", Email: " + userById.getEmail());// 更新用户userById.setName("Jane Doe");userById.setEmail("jane.doe@example.com");userDao.updateUser(userById);// 删除用户userDao.deleteUser(1);}
}

详细解释

  1. 配置数据源和JdbcTemplate

    • AppConfig 类使用 @Configuration 注解定义为一个配置类。
    • dataSource 方法配置了数据源,使用 DriverManagerDataSource 连接到MySQL数据库。
    • jdbcTemplate 方法创建了一个 JdbcTemplate 实例,并注入了数据源。
  2. 定义实体类

    • User 类是一个简单的Java类,包含 idname 和 email 属性,以及相应的getter和setter方法。
  3. 定义DAO类

    • UserDao 类使用 JdbcTemplate 进行数据库操作。
    • addUser 方法插入一个新用户。
    • getAllUsers 方法查询所有用户。
    • getUserById 方法根据ID查询用户。
    • updateUser 方法更新用户信息。
    • deleteUser 方法删除用户。
    • UserRowMapper 是一个内部类,实现了 RowMapper 接口,用于将结果集的每一行映射到 User 对象。
  4. 测试类

    • Main 类通过 AnnotationConfigApplicationContext 加载 AppConfig 配置,并获取 UserDao 的实例。
    • 演示了如何使用 UserDao 进行添加、查询、更新和删除用户的操作。

通过这种方式,Spring JDBC模板简化了JDBC操作,使代码更加简洁和易于维护。


http://www.mrgr.cn/news/67799.html

相关文章:

  • EasyExcel 学习之 导出 “提示问题”
  • onnxruntime-gpu cuda版本问题
  • 2021 数二真题
  • 【力扣打卡系列】单调栈
  • 《安富莱嵌入式周报》第345期:开源蓝牙游戏手柄,USB3.0 HUB带电压电流测量,LCR电桥前端模拟,开源微型赛车,RF信号扫描仪,开源无线电收发器
  • 7.2 设计模式
  • linux系统编译ptlib
  • 【CANOE】【学习】【诊断功能】正响应抑制
  • Excel 无法打开文件
  • 【推荐】python、django、drf学习博客网址推荐
  • I.MX6U 裸机开发3. GPIO操作控制LED灯
  • 什么是进销存与供应链管理?进销存与供应链有什么区别?
  • [JAVAEE] 网络基础
  • 文件系统和日志管理
  • C++之SET容器
  • 大规模地图构建的细粒度高分辨率卫星数据集OpenSatMap(3787张高分辨率卫星图像)0.15-0.3m
  • 线上3D展厅能实现哪些交互效果?
  • vue2 pdf 链接地址打开
  • 数据结构——双链表
  • 双11疯狂凑单:累坏买家,坑惨卖家
  • 基于TRIZ的教育机器人功能创新
  • 动漫风格大模型和lora推荐
  • 基于 ESP AT 固件使用 BLE 静态配对码完成安全连接和通信
  • 《清宫辞Ⅱ》开机:陈欣予旗装惊艳回归 重新演绎宫闱传奇
  • 树状数组浅谈
  • 论文阅读:基于语义分割的非结构化田间道路场景识别