SpringBoot 整合 JDBCTemplate

前文:

SpringBoot 的概述

SpringBoot 项目搭建

SpringBoot的核心注解

什么是 JDBCTemplate ?

JDBCTemplate 是 Spring 提供的一套 JDBC 模板框架,利用 AOP 技术来解决直接使用 JDBC 时的大量重复代码的问题。JDBC 虽然没有 Mybatis 那么灵活,但是比直接使用 JDBC 要方便很多。SpringBoot 中对 JDBCTemplate 的使用提供了自动化配置类 JdbcTemplateAutoConfiguration,源码如下:

@Configuration(
    proxyBeanMethods = false
)
@ConditionalOnClass({DataSource.class, JdbcTemplate.class})
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({JdbcProperties.class})
@Import({JdbcTemplateConfiguration.class, NamedParameterJdbcTemplateConfiguration.class})
public class JdbcTemplateAutoConfiguration {
    public JdbcTemplateAutoConfiguration() {
    }
}

导入相关的依赖

<dependencies>

    <!-- 导入 web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- 导入 JDBCTemplate 模板 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <!-- 导入连接驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- 导入 druid 连接池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

创建数据库

创建数据库以及表比较简单,这里就不做描述了,有三个字段分别是 id、name、author

数据库配置

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

spring:
  # 数据库配置
  datasource:
    url: jdbc:mysql://localhost:3306/数据库名?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 用户名
    password: 密码
    initial-size: 10
    max-active: 20
    max-idle: 8
    min-idle: 8

创建实体类

package com.example.demo.entity;

public class Book {
    
    private Integer id;
    
    private String name;
    
    private String author;

    public Integer getId() {
        return id;
    }

    public void setId(Integer 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 + '\'' +
                '}';
    }
}

创建数据库访问层

代码如下:

package com.example.demo.dao;

import com.example.demo.entity.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;

@Repository
public class BookDao {

    // 注入 jdbc 模板
    @Autowired
    private 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());
    }

    // 根据 id 删除书的信息
    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));
    }
}

创建业务层

先创建一个业务接口 BookService

package com.example.demo.service;

import com.example.demo.entity.Book;

import java.util.List;

public interface BookService {

    // 添加书
    int addBook(Book book);

    // 修改书的信息
    int updateBook(Book book);

    // 删除书
    int deleteBookById(Integer id);

    // 根据 id 获取书
    Book getBookById(Integer id);

    // 查询所有书
    List<Book> getAllBooks();

}

创建一个实现类实现该接口

package com.example.demo.service.impl;

import com.example.demo.dao.BookDao;
import com.example.demo.entity.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

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

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

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

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

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

控制器编写

以上代码编写好之后就可以编写控制器了,代码如下:

扫描二维码关注公众号,回复: 9348086 查看本文章
package com.example.demo.controller;

import com.example.demo.entity.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class BookController {

    // 注入 BookService
    @Autowired
    private BookService bookService;

    @GetMapping("/bookOps")
    @ResponseBody
    public void bookOps() {
        // 添加书信息
        Book book1 = new Book();
        book1.setName("西厢记");
        book1.setAuthor("王实甫");
        int addBook = bookService.addBook(book1);
        System.out.println("addBook --- " + addBook);

        // 修改书信息
        Book book2 = new Book();
        book2.setId(1);
        book2.setName("朝花夕拾");
        book2.setAuthor("鲁迅");
        int updateBook = bookService.updateBook(book2);
        System.out.println("updateBook --- " + updateBook);

        // 删除书信息
        int deleteBookById = bookService.deleteBookById(4);
        System.out.println("deleteBookById --- " + deleteBookById);

        // 根据 id 获取书信息
        Book getBookById = bookService.getBookById(1);
        System.out.println("getBookById --- " + getBookById);

        // 查询所以书信息
        List<Book> getAllBooks = bookService.getAllBooks();
        System.out.println("getAllBooks --- " + getAllBooks);

    }
}

测试

我们运行一下项目,访问 http://localhost:8080/bookOps

然后查看数据库信息是否一致

OK,以上就是 SpringBoot 整合 JdbcTemplate 的例子

发布了194 篇原创文章 · 获赞 919 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/Woo_home/article/details/104129358