Spring JdbcTemplate执行数据库操作详解

Spring JdbcTemplate执行数据库操作详解

什么是Spring JdbcTemplate?

Spring JdbcTemplate是Spring框架提供的一个用于简化数据库访问和操作的工具类,它可以轻松地完成基础数据操作,如增删改查等。

Spring JdbcTemplate的主要特点包括:

  • 简化的JDBC操作;
  • 与Spring的事务管理集成;
  • 提供了多种查询结果映射方式;
  • 提供了异常处理机制等。

如何使用Spring JdbcTemplate?

1. 添加Maven依赖

要使用Spring JdbcTemplate,先需要添加相关的Maven依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

2. 配置数据源

在Spring框架中使用JdbcTemplate,需要配置数据源,在Spring Boot项目中默认使用的是HikariCP连接池,所以只需要在application.properties文件中添加相应的配置即可:

# MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=xxxxx
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3.注入JdbcTemplate实例

完成数据源的配置之后,需要注入JdbcTemplate实例,使用@Autowire将JdbcTemplate注入到Bean中:

@Repository
public class DaoImpl implements Dao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

}

4.使用JdbcTemplate完成数据库操作

使用JdbcTemplate完成数据库操作,可以采用编写SQL语句和使用预编译的方式两种方式。

1)编写SQL语句

可以使用execute()执行增、删、改等操作,使用query()执行查询操作。

@Repository
public class DaoImpl implements Dao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void addUser(User user) {
        String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
        jdbcTemplate.update(sql, user.getName(), user.getAge());
    }

    @Override
    public void delUser(Long id) {
        String sql = "DELETE FROM user WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }

    @Override
    public void updateUser(User user) {
        String sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";
        jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getId());
    }

    @Override
    public User getUserById(Long id) {
        String sql = "SELECT * FROM user WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
    }

}

2)使用预编译的方式

使用JdbcTemplate的预编译的SQL语句可以有效的提高数据库的性能。

@Repository
public class DaoImpl implements Dao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void addUser(User user) {
        String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
        jdbcTemplate.update(conn -> {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, user.getName());
            ps.setInt(2, user.getAge());
            return ps;
        });
    }

    @Override
    public void delUser(Long id) {
        String sql = "DELETE FROM user WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }

    @Override
    public void updateUser(User user) {
        String sql = "UPDATE user SET name = ?, age = ? WHERE id = ?";
        jdbcTemplate.update(conn -> {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, user.getName());
            ps.setInt(2, user.getAge());
            ps.setLong(3, user.getId());
            return ps;
        });
    }

    @Override
    public User getUserById(Long id) {
        String sql = "SELECT * FROM user WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));
    }

}

JdbcTemplate执行数据库操作示例

以学生信息为例,在MySQL数据库中创建一个名为student的表,包括id、name、age三个字段。

1.插入数据示例

public void add(Student student) {
    String sql = "INSERT INTO student (name,age) VALUES (:name,:age)";
    SqlParameterSource parameters = new BeanPropertySqlParameterSource(student);
    namedParameterJdbcTemplate.update(sql, parameters);
}

其中,使用bean对象封装了学生的姓名和年龄,使用namedParameterJdbcTemplate插入数据。

2.更新数据示例

public void update(Student student) {
    String sql = "UPDATE student SET name=:name,age=:age where id=:id";
    SqlParameterSource parameters = new BeanPropertySqlParameterSource(student);
    namedParameterJdbcTemplate.update(sql, parameters);
}

使用bean对象封装学生的姓名、年龄和id,使用namedParameterJdbcTemplate根据id更新学生信息。

总结

以上是使用Spring JdbcTemplate执行数据库操作的详细攻略,尽管JdbcTemplate对JDBC进行了封装,可以使开发者更加方便的进行SQL操作,但开发者在操作数据库时,还是需要谨慎对待并添加相应的安全措施避免出现安全问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring JdbcTemplate执行数据库操作详解 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Java项目开启远程调试的方法步骤(tomcat、springboot)

    当我们遇到 Java 项目中出现奇怪的问题时,远程调试是一种非常有用的方法,它可以帮助我们定位问题并解决它。在这里,我们将讨论如何在 Tomcat 和 Spring Boot 中开启 Java 项目的远程调试。 开启 Tomcat 远程调试 步骤 1:修改 Tomcat 启动脚本 找到你的 Tomcat 安装路径下的 bin 目录,打开 catalina.s…

    Java 2023年5月19日
    00
  • java数据结构基础:绪论

    Java数据结构基础:绪论 什么是数据结构 数据结构是指为了有效地组织和存储数据,以便于访问和修改,而设计出来的抽象数据类型和实现方法。简单的来说,就是数据之间的关系组织形式。 为什么要学习数据结构 数据结构是计算机科学的核心领域之一,了解和掌握数据结构对于程序设计和编写具有重要的意义: 合理选择数据结构,可以使程序更加高效地执行和管理数据。 理解数据结构的…

    Java 2023年5月30日
    00
  • SpringBoot整合JdbcTemplate的示例代码

    针对SpringBoot整合JdbcTemplate的示例代码,我提供以下完整攻略: 简介 Spring Boot 是一个快速开发框架,而 JdbcTemplate 是 Spring 框架中用来简化 JDBC 操作的工具类。在 Spring Boot 中使用 JdbcTemplate,能够帮助我们更加简单快捷地完成数据库访问操作。 背景 为了演示Spring…

    Java 2023年5月19日
    00
  • Java设计模式之装饰者模式详解和代码实例

    Java设计模式之装饰者模式详解和代码实例 什么是装饰者模式? 装饰者模式是一种结构型设计模式,以动态的方式将责任附加到对象上。装饰者提供了与继承相比更为灵活的替代方案,以扩展功能。 装饰者模式的组成 抽象构件(Component):定义装饰者和被装饰者的公共接口。 具体构件(ConcreteComponent):这是被装饰者,这是需要进行功能扩展的对象。 …

    Java 2023年5月23日
    00
  • java数组元素的引用实例讲解

    让我来为你详细讲解一下“Java数组元素的引用实例讲解”。 什么是Java数组元素引用? Java数组数据类型是一种简单的复合类型,用于存储相同数据类型的多个值。Java数组中的元素类似于单独的变量,可以引用或存储任何Java对象,包括数组。Java数组元素的引用是指一种使用数组元素来访问和引用其他Java对象的方法。 Java数组元素引用实例讲解 下面是两…

    Java 2023年5月26日
    00
  • Java8新特性Lambda表达式的一些复杂用法总结

    Java8新特性Lambda表达式的一些复杂用法总结 在Java8中,Lambda表达式的出现为我们带来了更简洁、更高效的编程方式。除了基本语法外,Lambda表达式还有一些复杂的用法,本文将对这些用法进行总结,并提供两个示例来说明。 一、函数接口 Lambda表达式的本质是函数式编程,因此我们需要了解函数接口。函数接口是指只有一个抽象方法的接口。在Java…

    Java 2023年5月26日
    00
  • 基于Java代码操作Redis过程详解

    下面是“基于Java代码操作Redis过程详解”的完整攻略。 1. 准备工作 在开始使用Java操作Redis之前,首先需要进行以下准备工作: 下载并安装Java开发工具,例如Eclipse、Intellij IDEA等。 下载并安装Redis数据库,这里推荐使用官方提供的稳定版本并进行配置。 导入Redis客户端Java驱动jar包,例如jedis等。 2…

    Java 2023年6月15日
    00
  • 详解java线程的开始、暂停、继续

    当涉及到多任务处理时,线程是Java中非常重要的机制。但是,在开始了解Java线程如何开始、暂停、继续之前,我们需要先了解线程的基础知识。 什么是Java线程? Java线程是程序执行中的最小单元,与进程不同,线程是在一个进程中执行的代码片段,每个进程可以有多个线程,而每个线程都可以并行执行不同的任务。Java中的线程可以有效地帮助程序在执行中避免阻塞,从而…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部