Spring JdbcTemplate执行数据库操作详解

yizhihongxing

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日

相关文章

  • Spring MVC官方文档学习笔记(一)之Web入门

    注: 该章节主要为原创内容,为后续的Spring MVC内容做一个先行铺垫 1.Servlet的构建使用 (1) 选择Maven -> webapp来构建一个web应用 (2) 构建好后,打开pom.xml文件,一要注意打包方式为war包,二导入servlet依赖,如下 <!– 打war包 –> <packaging>war…

    Java 2023年5月11日
    00
  • Java获取精确到秒的时间戳方法

    当我们需要获取当前时间的时间戳时,可以使用Java提供的System.currentTimeMillis()方法,该方法返回的是自1970年1月1日零时零分零秒(GMT/UTC)以来的毫秒数,也就是常说的Unix时间戳。但有时候我们需要获取精确到秒的时间戳,可以通过以下两种方式实现。 1. 使用Java 8中的Instant类 Java 8中新增了一个新的日…

    Java 2023年5月20日
    00
  • Java使用正则表达式检索、替换String中特定字符和正则表达式的一切

    Java中使用正则表达式进行字符串的检索、替换等操作主要依靠Java.util.regex包中提供的类和方法。下面将从如下几个方面,介绍Java使用正则表达式进行检索、替换操作的完整攻略: 正则表达式的基础知识 在使用Java进行正则表达式操作之前,我们需要先了解一些正则表达式的基础知识,包括常用的正则表达式符号/语法、匹配模式等。下面给出一个简单的正则表达…

    Java 2023年5月27日
    00
  • Spring cloud oauth2如何搭建认证资源中心

    Spring Cloud Oauth2是Spring Cloud生态中基于Oauth2.0协议实现的授权、认证框架。它将授权、认证、鉴权的功能进行了拆分,将获得token的过程分离出来形成一个微服务,我们可以称之为认证服务认证中心,而资源服务需要鉴权的时候可以通过Feign请求认证服务获取token后再访问资源服务。下面是搭建认证资源中心的详细攻略。 1. …

    Java 2023年5月20日
    00
  • Java中jqGrid 学习笔记整理——进阶篇(二)

    让我来详细讲解一下“Java中jqGrid 学习笔记整理——进阶篇(二)”这篇文章的内容。 一、概述 这篇文章是介绍如何在Java web项目中使用jqGrid进行数据展示和交互的进阶篇。主要包括以下内容: jqGrid特性及概念解析; 如何使用Java代码动态生成jqGrid; 如何在jqGrid中使用自定义格式化函数; 如何使用jqGrid中的事件; 如…

    Java 2023年5月20日
    00
  • 用java在web环境下上传和下载文件的技巧

    为在web环境下实现Java文件上传和下载,我们可以使用Servlet API或Spring框架。下面将为您提供示例代码,并简要讲解如何实现。 文件上传 使用Servlet API 在Servlet API中,我们可以使用HttpServletRequest和javax.servlet.http.Part对象来处理文件上传。首先,需要在HTML表单中添加en…

    Java 2023年5月19日
    00
  • 解决IDEA无法下载maven依赖的问题

    关于“解决IDEA无法下载maven依赖的问题”的完整攻略,以下是我整理的步骤: 1. 检查Maven仓库的配置是否正确 首先检查是否配置了正确的Maven仓库设置。可以在Windows环境下检查%USERPROFILE%/.m2/settings.xml文件或在Linux/Max OS X下检查~/.m2/settings.xml文件。 在settings…

    Java 2023年5月20日
    00
  • java分割日期时间段代码

    下面就让我来为您详细讲解一下“java分割日期时间段代码”的完整攻略。 1. 背景介绍 在日常开发中,经常会遇到需要把一个时间段拆分成多个小的时间段的需求,比如把一个月拆分成多个周,或者把一天拆分成多个小时等。Java中有多种方式来实现这个需求,下面我将详细介绍其中一种实现方法。 2. 实现思路 实现思路比较简单,主要是通过Java中的Calendar类来处…

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