Spring Boot 使用 JDBCTemplate 操作 MySQL 数据库(一)基础篇

认识 Java 的数据库连接模板 JDBCTemplate

认识 JDBCTemplate

了解 JDBC

JDBC(Java Database Connectivity),它是 Java 用于连接数据库的规范,也就是用于执行数据库 SQL 语句的 Java API
JDBC 可以连接多种数据库,原因在于提供了统一访问的接口,这也符合 Java 程序接口设计的模式。

JDBC 需要每次进行数据库连接,然后出了 SQL 语句、传值、关闭数据库。这样的流程操作,一旦忘记某一步,就会出现很多问题,于是 JDBCTemplate 被设计出来了。

了解 JDBCTemplate

JDBCTemplate = JDBC + Template 的组合,是对 JDBC 的封装。它更便于程序实现,替我们完成所有的 JDBC 底层操作。因此,对于数据库的操作,再不需要每次都进行连接、打开、关闭了。

JDBC 和 JDBCTemplate 就像是仓库管理员,负责从仓库(数据库)中存取物品。而后者采用的是“电动门自动控制”

JDBCTemplate 实现起来比 ORM 繁琐,所以大部分开发使用的是 ORM(JPAMyBatis)。但是 JDBCTemplate 依然有市场,因为学习成本低。

实例:用 JDBCTemplate 实现数据的 增删改查

配置基础依赖

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>

添加完成后,还需要配置数据库连接信息。这样 JDBCTemplate 才能正常连接数据库。
application.properties 配置文件中配置数据库的地址和用户信息

# MySql 数据库信息
    # 驱动地址
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    # 配置 IP 地址、编码、时区
spring.datasource.url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
    # 用户名
spring.datasource.username=root
    # 密码 此处没有密码是因为 数据库本身没有设置密码
spring.datasource.password=

新建实体类

新建一个测试实体类 User,实现 RowMapper 类,重新 mapRow 方法,以便实体字段和数据表字段映射。(下面有创建数据表的 SQL 命令)

package com.example.model;

import lombok.Data;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

@Data
public class User implements RowMapper<User> {
    private Integer id;
    private String username;
    private String password;

    @Override
    public User mapRow(ResultSet resultSet, int i) throws SQLException {
        User user = new User();
        user.setId(resultSet.getInt("id"));
        user.setUsername(resultSet.getString("username"));
        user.setPassword(resultSet.getString("password"));
        return user;
    }
}

操作数据

JDBCTemplate 提供了以下操作数据的 3 个方法。

  • execute:表示“执行”,用于直接执行 SQL 语句。
  • updata:表示“更新”,包括 新增、修改、删除 操作。
  • query:表示“查询”。

创建数据表、新增、查询、删除

在使用 JDBCTemplate 之前,需要在控制器中注入 JDBCTemplate,然后就可以通过 execute 方法执行 SQL 操作了。

package com.example.test;

import com.example.model.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

@SpringBootTest
public class UserControllerTest {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    // 创建表
    @Test
    public void createUserTable() throws Exception {
        String sql = "CREATE TABLE `user`(\n" +
                "`id` int(10) NOT NULL AUTO_INCREMENT,\n" +
                "`username` varchar(100) DEFAULT NULL,\n" +
                "`password` varchar(100) DEFAULT NULL,\n" +
                "PRIMARY KEY(`id`)\n" +
                ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;\n" +
                "\n";
        jdbcTemplate.execute(sql);
    }

    // 添加数据
    @Test
    public void saveUserTest() throws Exception {
        String sql = "INSERT INTO user (USERNAME, PASSWORD) VALUES ('张三', '123456');";
        Integer rows = jdbcTemplate.update(sql);
        System.out.println(rows);
    }

    // 查询数据
    @Test
    public void getUserByName() throws Exception {
        String name = "张三";
        String sql = "SELECT * FROM user WHERE USERNAME = ?";
        List<User> list = jdbcTemplate.query(sql, new User(), name);
        for (User user : list) {
            System.out.println(user);
        }
    }

    // 查询所有数据
    @Test
    public void list() throws Exception {
        String sql = "SELECT * FROM user LIMIT 0,1000";
        List<User> userList = jdbcTemplate.query(sql, new User());
        for (Object user : userList) {
            System.out.println(user);
        }
    }

    // 数据修改
    @Test
    public void updateUserPassword() throws Exception {
        Integer id = 1;
        String password = "99998888";
        String sql = "UPDATE user SET PASSWORD = ? WHERE ID = ?";
        Integer rows = jdbcTemplate.update(sql, password, id);
        System.out.println(rows);
    }

    // 数据删除
    @Test
    public void deleteUserById() throws Exception {
        Integer id = 1;
        String sql = "DELETE FROM user WHERE ID = ?";
        Integer rows = jdbcTemplate.update(sql, id);
        System.out.println(rows);
    }
}

认识 ORM

ORM(Object Relational Mapping)是 对象/关系映射。它提供了概念性的、易于理解的数据模型,将数据库中的表内存中的对象建立映射关系。它是随着面向对象的软件开发方法的发展而产生的,面向对象的开发方法依然是当前主流的开发方法。

对象关系型数据是业务实体的两种表现形式。业务实体在内存中的表现为对象,在数据库中表现为关系型数据。内存中的对象不会被永久保存,只有关系型数据库(或 NoSQL 数据库,或文件)中的对象会被永久保存。

对象/关系映射(ORM)系统一般以中间件的形式存在,因为内存中的对象之间存在关联和继承关系,而在数据库中,关系型数据无法直接表达多对多的关联和继承关系。对象、数据库通过 ORM 映射的关系图。

目前比较常用的 ORM 是国外流行的 JPA 和国内流行的 MyBatis

Spring Boot 使用 JDBCTemplate 操作 MySQL 数据库(一)基础篇_第1张图片

本文主要来源:书名:《Spring Boot实战派》第八章;作者:龙中华;出版社:中国工信出版社。

你可能感兴趣的:(spring,mysql)