SpringBoot 12 整合 JDBC

本文介绍了如何在SpringBoot项目中整合JDBC,利用SpringData进行统一的数据访问处理。通过添加相关依赖,配置数据源,展示了使用默认的数据连接池Hikari以及JdbcTemplate进行CRUD操作的方法。SpringBoot的JdbcTemplate提供了便捷的数据库操作接口,返回的数据类型接近JSON格式,便于处理。

12.1 整合 JDBC


对于数据访问层,无论是 SQL(关系型数据库)还是 NOSQL(非关系型数据库)Spring Boot 底层都是采用 Spring Data 的方式 进行统一处理。

Spring Boot 底层都是采用 Spring Data 的方式 进行统一处理各种数据库的,Spring Data 也是 Spring 中 与 Spring BootSpring Cloud 等齐名的知名框架。

Spring Data 官网:https://spring.io/projects/spring-data

数据库相关的启动器:

在这里插入图片描述

  1. 创建 Spring Boot 项目的时候,你会发现 左边依赖 有 数据库驱动的依赖。

在这里插入图片描述

真是可以呀,以前 数据库驱动的依赖 都得 我们自己用 maven 导入 。现在 创建 SpringBoot 就可以 单机选择 驱动依赖。NB在这里插入图片描述

如果在创建 Spring Boot 出现 无法 连接到 服务器的现象。请 进入 All-Setting

在这里插入图片描述
在 输入框里面 输入 http:start.spring.io 即可。

  1. 配置连接数据库的文件(这一步是必做的,要不然咋连接数据呀。)
  • 可以使用 Yaml
CREATE DATABASE `mybatis`;

USE `mybatis`;

CREATE TABLE `user`(
	`id` INT(20) NOT NULL PRIMARY KEY,
	`name` VARCHAR(30) DEFAULT NULL,
	`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'王五','123456'),
(2,'张三','123456'),
(3,'李四','123456')
spring:
  datasource:
    username: demo
    password: 123123
    url: jdbc:mysql://47.108.200.200:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver

DataSource dataSource 数据源,拿到这个数据源可以做很多的原生态 JDBC 操作。

@Test
    void test() throws SQLException {
        System.out.println(dataSource.getClass());
    }

在这里插入图片描述
发现 Spring Boot 的默认数据库连接池 用的 是 hikari

    @Test
    void test() throws SQLException {
        System.out.println(dataSource.getClass());
        Connection connection = dataSource.getConnection();
        String sql = "select * from user";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ResultSet resultSet = preparedStatement.executeQuery();
        while(resultSet.next()){
            System.out.println(resultSet.getObject(1) + " || "
                    + resultSet.getObject(2) + " || " + resultSet.getObject(3));
        }
        connection.close();
    }

在这里插入图片描述
JdbcTemplate:不知道大家是否还记得 Template,之前在 整合 mybatis-spring 的时候 就学习过 这个 Template。

这玩意也可以操纵数据库,而且 功能更加的完善和强大。

但是 在使用这东西 之前,必须 要 添加 一个 依赖。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

可以说 JdbcTemplate 十分的 亲民,人性化。

比如说 queryForList 返回的类型是 List<Map<String,Object>> ,知道为什么用这种 携带 Map 的类型的吗。因为 这样的数据 更加的 接近于 JSON。JSON 就是 键值对形式的,所以 查询出来的数据,尽可量 全用 Map 去 接近。

package top.muquanyu.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@RestController
public class JdbcController {
    @Autowired(required = false)
    JdbcTemplate jdbcTemplate;

    @RequestMapping("/userList")
    public List<Map<String, Object>> userList(){
        String sql = "select * from user";
        List<Map<String, Object>> list_map = jdbcTemplate.queryForList(sql);

        return list_map;
    }
}

在这里插入图片描述

  • 查询的写法,必须得有 映射类 pojo
    在这里插入图片描述

  • 增加一条数据

    @RequestMapping("/insert")
    public String insert(){

        jdbcTemplate.update("insert into user(id,name,pwd) values (4,'test','123123')");

        return "insert_ok";
    }

在这里插入图片描述
在这里插入图片描述

  • 修改一条数据
    @RequestMapping("/update/{id}")
    public String insert(@PathVariable("id") Integer id){

        String sql = "update user set name = ?, pwd = ? where id = ?";

        Object[] params = new Object[3];
        params[0] = "修改后的名字";
        params[1] = "修改后的密码";
        params[2] = id;

        jdbcTemplate.update(sql,params);

        return "update_ok";
    }

在这里插入图片描述

在这里插入图片描述

  • 删除一条数据

同理 用 update 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值