Java 中 Spring Boot 使用 JdbcTemplate 访问 MySql 数据库

601 阅读3分钟

上一篇文章 Java Web 编写 Restful API 中,我们用临时存储,模拟了 Restful API。本文,我们将连接数据库 MySql

Demo 的相关环境如下:

  • java 版本 11
  • Spring Boot 版本 2.7.12
  • 基于 mac m1 - macOS Monterrey 版本 12.4
  • 安装的 mysql 版本如下文展示

MySql 准备工作

查看是否安装 MySql

我们通过 mysql -V 查看 mac 上是否安装了 mysql

查看是否安装了mysql.png

安装 MySql

这里,我们通过 brew 安装 mysql - brew install mysql,下图是安装成功的状态。

mysql安装成功.png

安装的 mysql 版本为 8.0.33

启动 MySql

通过 brew services start mysql 启动 MySql 服务:

启动 mysql 服务.png

启动之后,MySql 服务默认的端口号是 3306,账号是 root,密码为空。

还有其他常见操作如下:

  • 重启 MySql 服务 - brew services restart mysql
  • 停止 MySql 服务 - brew services stop mysql

Navicat 创建 MySql 连接名、数据库和表

这里我们使用 Navicat 工具创建 MySql 连接名、数据库和表。当然,读者可通过命令行进行创建,这个坑会在后面的文章进行填补。

创建 MySql 连接名

连接名这里取名为 jimmy_test测试连接

测试连接成功.png

创建 MySql 数据库

然后,我们鼠标右击连接名 jimmy_test 创建数据库:

新建数据库step1.png

新建数据库step2.png

我们创建了名为 mydb_01 的数据库。

新建数据库step3.png

WechatIMG553.png

创建 MySql 数据库表

我们创建名为 user 的用户表,用于存储用户的数据,该表也是方便后面的测试。

鼠标右击 mydb_01 下的 -> 新建表

新建数据库表.png

该表下只有简单的两个字段:nameage

验证连接 MySql

我们参考之前文章 IntelliJ IDEA 创建 Java Web 项目 创建名为 chapter3-1 的项目。

整个项目的目录结构如下图:

chapter3-1初始化.png

我们在 pom.xl 中添加 mysql 依赖。这里我安装的是 mysql 版本是 8.0.33,所以在 spring boot 的 pom.xml 中添加该依赖如下:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

完整的 pom.xl 文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>chapter3-1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>chapter3-1</name>
    <description>chapter3-1</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

然后,我们在 src/main/resources/application.properties 文件中设置连接的数据库信息:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb_01
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

我们在 com.example.chapter31/Chapter31Application.java 文件同级建立表信息文件 User.java,抽象接口类 UserService.java 和服务实现类 UserServiceImpl.java。具体的内容如下:

// User.java
// 创建表
package com.example.chapter31;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class User {
    private String name; // 用户名,字符串类型
    private Integer age; // 年龄,正数类型
}

这里的用户表字段只有 nameage,对应刚才设置的数据库用户表的字段。

设定抽象接口:

// UserService.java
// 抽象接口
package com.example.chapter31;

import java.util.List;

public interface UserService {
    // 新增用户
    int create(String name, Integer age);

    // 查询指定用户
    List<User> getByName(String name);

    // 删除指定用户
    int deleteByName(String name);

    // 获取所有用户总量
    int getAllUsers();

    // 删除所有用户
    int deleteAllUsers();
}

之后,我们实现相关的用户服务:

package com.example.chapter31;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    private JdbcTemplate jdbcTemplate;

    UserServiceImpl(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    // 创建用户
    @Override
    public int create(String name, Integer age) {
        return jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age);
    }

    // 根据用户名获取数据
    @Override
    public List<User> getByName(String name) {
        List<User> users = jdbcTemplate.query("select NAME, AGE from USER where NAME = ?", (resultSet, i) -> {
            User user = new User();
            user.setName(resultSet.getString("NAME"));
            user.setAge(resultSet.getInt("AGE"));
            return user;
        }, name);
        return users;
    }

    // 根据用户名删除数据
    @Override
    public int deleteByName(String name) {
        return jdbcTemplate.update("delete from USER where NAME = ?", name);
    }

    // 获取所有用户的条数
    @Override
    public int getAllUsers() {
        return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);
    }

    // 删除所有的用户
    @Override
    public int deleteAllUsers() {
        return jdbcTemplate.update("delete from USER");
    }

}

最后,我们在 test/java/com.example.chapter31/Chapter31ApplicationTests.java 的文件中进行测试,这里只是测试了添加用户,其他的操作类似:

package com.example.chapter31;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter31ApplicationTests {

    @Autowired
    private UserService userService;

    @Before
    public void setUp() {
        // 清空user表
        userService.deleteAllUsers();
    }

    @Test
    public void test() throws Exception {
        // 创建用户
        userService.create("Jimmy", 1);
    }

}

然后点击运行,如图:

测试添加用户.png

我们本地打开数据库 mydb_01,就可以看到该数据库的用户表下生成了一条数据:

用户表的数据.png

参考

pexels-daniela-bártová-15628663.jpg

相关阅读