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项目实现过程解析

    手动编译并运行Java项目的过程可以分为以下步骤: 1. 编写Java代码 首先,我们需要编写Java代码。可以使用任何文本编辑器编写Java代码,只需要将代码保存为.java文件即可。例如,我们可以创建一个名为HelloWorld.java的文件,并将以下代码复制到其中: public class HelloWorld { public static vo…

    Java 2023年5月19日
    00
  • Spring Security 登录时添加图形验证码实现实例

    下面我将详细讲解“Spring Security 登录时添加图形验证码实现实例”的完整攻略。 1. 概述 在实际开发中,登录验证是必不可少的一个过程,为了增强用户登录的安全性,可以添加图形验证码的验证方式。本攻略将详细介绍如何在 Spring Security 中实现图形验证码的添加。 2. 实现步骤 2.1 添加依赖 首先,在项目的 pom.xml 文件中…

    Java 2023年6月3日
    00
  • Spring boot实现应用打包部署的示例

    下面我将为你详细介绍Spring Boot实现应用打包部署的完整攻略。 什么是Spring Boot Spring Boot是Spring框架的一种扩展,其主要目的是简化Spring应用(特别是Spring MVC)的搭建和开发流程。Spring Boot以约定优于配置的方式来实现自动化的Spring应用搭建,大部分的Spring Boot应用只需要很少的配…

    Java 2023年5月15日
    00
  • Java Struts图片上传至指定文件夹并显示图片功能

    下面是详细讲解Java Struts图片上传至指定文件夹并显示图片功能的完整攻略: 1. 概述 本文将介绍如何在Java Struts框架下实现图片上传至指定文件夹并显示图片的功能。在实现过程中,我们将使用commons-fileupload和commons-io等第三方库来实现图片上传,通过Struts的Action来处理上传请求,并将上传的图片保存至指定…

    Java 2023年5月20日
    00
  • 浅谈一下Java为什么不能使用字符流读取非文本的二进制文件

    标题:浅谈一下Java为什么不能使用字符流读取非文本的二进制文件 在Java中,我们通常使用字节流来处理二进制文件。而字符流主要是用来处理文本文件,因为字符流在读取文本文件时,可以自动将字节转换为字符,而读取二进制文件时,字符流就会出现问题。 一、字符流与字节流的区别 字符流的底层还是使用字节流实现的,但字符流在处理文本时通过Java编码转换器将字节转换为字…

    Java 2023年5月20日
    00
  • SpringBoot返回统一的JSON标准格式实现步骤

    下面是“SpringBoot返回统一的JSON标准格式实现步骤”的完整攻略: 1. 为什么需要统一的JSON标准格式 在Web开发中,经常需要通过API接口返回JSON格式的数据,在返回JSON数据时大家的实现方式可能会有所不同,这就导致在调用不同接口时,返回的JSON格式可能会存在不同的字段、不同的格式等情况,这也会增加前端开发人员的工作难度。因此,为了简…

    Java 2023年5月26日
    00
  • IDEA的基本使用(让你的IDEA有飞一般的感觉)

    下面就为您详细讲解“IDEA的基本使用(让你的IDEA有飞一般的感觉)”的完整攻略。 1. 什么是IDEA IntelliJ IDEA是一款由JetBrains公司开发的Java集成开发环境(IDE)。除了Java外,它还支持各种各样的编程语言,如Kotlin、Groovy和Scala等。在软件开发中,工具的重要性与代码编写同等重要,好的IDE可以帮助我们更…

    Java 2023年5月20日
    00
  • SpringMVC中controller接收json数据的方法

    下面我将详细讲解”SpringMVC中controller接收json数据的方法”的攻略。 一、引入Jackson库 在项目的pom.xml文件中增加Jackson依赖: <!–Jackson依赖–> <dependency> <groupId>com.fasterxml.jackson.core</groupI…

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