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

Spring Boot中对JdbcTemplate的使用提供了自动化配置类JdbcTemplateAutoConfiguration,当classpath下存在DataSource和JdbcTemplate并且DataSource只有一个实例时,自动配置才会生效,若开发者没有提供JdbcOperations,则Spring Boot会自动向容器中注入一个JdbcTemplate(JdbcTemplate是JdbcOperations的子类)。由此可以看到,开发者想要使用JdbcTemplate,只需要提供JdbcTemplate的依赖和DataSource依赖即可。

具体操作步骤如下。

springboot 整合JdbcTemplate_spring boot

创建数据库和表

在数据库中创建表,代码如下:

create table z_book(
	id int not null auto_increment,
	name varchar(128),
	author varchar(64),
	primary key(id)
) comment '图书'

insert into z_book values (null,'图书名','作者');

创建项目

创建Spring Boot项目,添加如下依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>

spring-boot-starter-jdbc中提供了spring-jdbc,另外还加入了数据库驱动依赖和数据库连接池依赖。

数据库配置

在application.properties中配置数据库基本连接信息:

server.port=8099

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeZone=UTC
spring.datasource.username=root
spring.datasource.password=mysql123

创建实体类

创建Book实体类,代码如下:

Book.java

package com.shrimpking.pojo;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/5 15:27
 */
public class Book
{
    private int id;
    private String name;
    private String author;

    public Book()
    {
    }

    public Book(String name, String author)
    {
        this.name = name;
        this.author = author;
    }

    public 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 getAuthor()
    {
        return author;
    }

    public void setAuthor(String author)
    {
        this.author = author;
    }

    @Override
    public String toString()
    {
        return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + '}';
    }
}

创建数据库访问层

创建BookDao,代码如下:

package com.shrimpking.dao;

import com.shrimpking.pojo.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/5 15:29
 */
@Repository
public class BookDao
{
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 增加
     * @param book
     * @return
     */
    public int addBook(Book book)
    {
        String sql = "insert into z_book(name,author) values(?,?)";
        return jdbcTemplate.update(sql,book.getName(), book.getAuthor());
    }

    /**
     * 修改
     * @param book
     * @return
     */
    public int updateBook(Book book)
    {
        String sql = "update z_book set name=?,author=? where id=?";
        return jdbcTemplate.update(sql,book.getName(),book.getAuthor(),book.getId());
    }

    /**
     * 删除
     * @param id
     * @return
     */
    public int deleteBookById(int id)
    {
        String sql = "delete from z_book where id=?";
        return  jdbcTemplate.update(sql,id);
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    public Book getBookById(int id)
    {
        String sql = "select id,name,author from z_book where id=?";
        return jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(Book.class),id);

    }

    /**
     * 查询全部
     * @return
     */
    public List<Book> getAllBooks()
    {
        String sql = "select id,name,author from z_book";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Book.class));
    }
}

代码解释:

• 创建BookDao,注入JdbcTemplate。由于已经添加了spring-jdbc相关的依赖,JdbcTemplate会被自动注册到Spring容器中,因此这里可以直接注入JdbcTemplate使用。

• 在JdbcTemplate中,增删改三种类型的操作主要使用update和batchUpdate方法来完成。query和queryForObject方法主要用来完成查询功能。另外,还有execute方法可以用来执行任意的SQL、call方法用来调用存储过程等。

• 在执行查询操作时,需要有一个RowMapper将查询出来的列和实体类中的属性一一对应起来。如果列名和属性名都是相同的,那么可以直接使用BeanPropertyRowMapper;如果列名和属性名不同,就需要开发者自己实现RowMapper接口,将列和实体类属性一一对应起来。

创建Service和Controller

创建BookService和BookController,代码如下:

BookService.java

package com.shrimpking.service;

import com.shrimpking.dao.BookDao;
import com.shrimpking.pojo.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/5 15:43
 */
@Service
public class BookService
{
    @Autowired
    private BookDao bookDao;

    /**
     * 增加
     * @param book
     * @return
     */
    public int addBook(Book book)
    {
        return bookDao.addBook(book);
    }

    /**
     * 修改
     * @param book
     * @return
     */
    public int updateBook(Book book)
    {
        return bookDao.updateBook(book);
    }

    /**
     * 删除
     * @param id
     * @return
     */
    public int deleteBook(int id)
    {
        return bookDao.deleteBookById(id);
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    public Book getBookById(int id)
    {
        return bookDao.getBookById(id);
    }

    /**
     * 查询全部
     * @return
     */
    public List<Book> getAllBooks()
    {
        return bookDao.getAllBooks();
    }
}

BookController.java

package com.shrimpking.controller;

import com.shrimpking.pojo.Book;
import com.shrimpking.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;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/5 15:48
 */
@RestController
public class BookController
{
    @Autowired
    private BookService bookService;

    @GetMapping("/books")
    public void bookOperation()
    {
        //增加
        Book b1 = new Book("高中语文","人教版");
        int i = bookService.addBook(b1);
        System.out.println("addBook>>>" + i);

        //修改
        Book b2 = new Book();
        b2.setId(1);
        b2.setName("大学语文");
        b2.setAuthor("高教社");
        int i2 = bookService.updateBook(b2);
        System.out.println("updateBook>>>" + i2);

        //查询一个
        Book oneBook = bookService.getBookById(1);
        System.out.println("getBookById>>>" + oneBook.toString());

        //删除
        int i3 = bookService.deleteBook(1);
        System.out.println("deleteBook>>>" + i3);

        //查询全部
        List<Book> allBooks = bookService.getAllBooks();
        for (Book book : allBooks)
        {
            System.out.println(book);
        }

    }
}

springboot 整合JdbcTemplate_spring boot_02

springboot 整合JdbcTemplate_bc_03

 

springboot 整合JdbcTemplate_bc_04