JdbcTemplate用法详解

本文详细介绍了Spring的JdbcTemplate,它是一个简化JDBC操作的模板框架,通过AOP处理资源管理,提供便利且安全的数据库操作。主要内容包括JdbcTemplate的更新数据库方法,如update、execute、batchUpdate等,以及在SpringBoot中的整合步骤。还涵盖了JdbcTemplate的基本用法,如创建实体类、数据访问层,并展示了如何使用RowMapper进行结果映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JdbcTemplate概述:

JdbcTemplate是Spring提供的一套JDBC模板框架,利用AOP技术来解决直接使用JDBC时大量重复代码的问题。JdbcTemplate虽然没有MyBatis那么灵活,但是比直接使用JDBC要方便灵活的多。

JdbcTemplate是Spring的一部分,JdbcTemplate处理了资源的建立和释放。帮助我们避免一些常见的错误,比如关闭连接等等。它运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

JdbcTemplate更新数据库的常用方法:

  • update(用于执行insert、update、delete等DML语句)
  • execute (可执行所有的SQL语句)
  • batchUpdate(批量更新数据库)
  • queryForObject(查询单行)
  • query(查询多行)

SpringBoot整合JdbcTemplate:

添加依赖:

​ <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>2.4.0</version>
 </dependency>
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.2.3</version>
</dependency>

数据配置:

spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/chapter05?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = root

如此之后,配置就完成了。

JdbcTemplate基本用法:

创建实体类:Book.java

import lombok.Data;

@Data
public class Book {
    private Integer id;
    private String name;
    private String author;
}

创建数据库访问层:BookDao.java

import java.util.List;

/**
 * @Repository 注解:
 * 该注解作用在dao类上,可以将类别识别为bean
 * 但该注解作用不只是将类别识别为bean,同时它还能将所标注的类中抛出的数据访问异常封装为Spring的数据访问异常类型
 * Spring本身提供了一个丰富的并且是于具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常
 * 使得异常独立于底层的框架
 */
@Repository
public class BookDao {
    @Autowired
    JdbcTemplate jdbcTemplate;

    //新增记录
    public int addBook(Book book){
        return jdbcTemplate.update("insert into book(name,author) values (?,?)",book.getName(),book.getAuthor());
    }

    //更新记录
    public int updateBook(Book book){
        return jdbcTemplate.update("update book set name = ?,author = ? where id = ?",book.getName(),book.getAuthor(),book.getId());
    }

    //删除记录
    public int deleteBookById(Integer id){
        return jdbcTemplate.update("delete from book where id = ?",id);
    }

    //根据id查询记录
    public Book getBookById(Integer id){
        return jdbcTemplate.queryForObject("select * from book where id = ?",new BeanPropertyRowMapper<>(Book.class),id);
    }

    //查询全部记录
    public List<Book> getAllBooks(){
        return jdbcTemplate.query("select * from book",new BeanPropertyRowMapper<>(Book.class));
    }
}

代码解释:

  • 创建BookDao,注入JdbcTemplate,由于已经添加了spring-jdbc相关依赖,JdbcTemplate会被自动注册到Spring容器中,因此这里可以直接注入使用
  • 在JdbcTemplate中,增删改查三种类型的操作主要使用update和batchUpdate方法来完成。query和queryForObject方法主要用来完成查询功能。另外,execute方法可以用来执行任意的SQL、call方法来调用存储过程等
  • 在执行查询操作时,需要有一个RowMapper将查询出来的列和实体类中的属性一一对应起来。如果列名和属性名时相同的,那么可以直接使用BeanPropertyRowMapper,如果不相同,就需要自己实现RowMapper接口,将列和实体类属性一一对应起来

创建Service:

import com.example.demo.Dao.BookDao;
import com.example.demo.Domain.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookService {
    @Autowired
    BookDao bookDao;

    public int addBook(Book book){
        return bookDao.addBook(book);
    }

    public int updateBook(Book book){
        return bookDao.updateBook(book);
    }

    public int deleteBookById(Integer id){
        return bookDao.deleteBookById(id);
    }

    public Book getBookById(Integer id){
        return bookDao.getBookById(id);
    }

    public List<Book> getAllBooks(){
        return bookDao.getAllBooks();
    }
}

创建Controller:

import com.example.demo.Domain.Book;
import com.example.demo.Service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class BookController {
    @Autowired
    BookService bookService;

    @GetMapping("/bookOps")
    public void bookOps(){
        Book book = new Book();
        book.setName("西厢记");
        book.setAuthor("王实甫");
        int i = bookService.addBook(book);
        System.out.println("addBook:"+i);
        Book book1 = new Book();
        book1.setName("朝花夕拾");
        book1.setAuthor("鲁迅");
        int updateBook = bookService.updateBook(book1);
        System.out.println("updateBook:"+updateBook);
        Book book2 = bookService.getBookById(1);
        System.out.println("getBook:"+book2);
        int delete = bookService.deleteBookById(2);
        System.out.println("deleteBook:"+delete);
        List<Book> allBooks = bookService.getAllBooks();
        System.out.println("getAllBooks:"+allBooks);
    }
}

访问路径:

http://localhost:8080/bookOps

控制台打印日志:

addBook:1
updateBook:0
getBook:Book(id=1, name=三国演义, author=罗贯中)
deleteBook:0
getAllBooks:[Book(id=1, name=三国演义, author=罗贯中), Book(id=3, name=西厢记, author=王实甫), Book(id=4, name=西厢记, author=王实甫), Book(id=5, name=西厢记, author=王实甫)]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值