后端学习笔记-安装MySQL数据库并在项目中配置 MyBatis

整个流程是先在自己电脑上安装数据库,然后在项目里配置连接数据库,并配置 MyBatis,最后写单元测试,看下是否能正常从数据库中筛选到数据。

# 安装数据库

MySQL 官方提供了安装包 (opens new window),下载 DMG,然后通过图形界面的方式进行安装。

下图展示了我将要安装的 MySQL 版本,点击 Download 开始进行下载。

Untitled

下载好之后就跟别的软件一样,通过安装引导程序一路安装就好了,中间有一个地方特别说明一下,就是关于强密码加密模式和经典密码加密模式。我这里为了兼容选择了经典密码加密模式。

最后设置好数据库密码之后,MySQL 数据库就算安装成功了,去系统偏好设置里会看到新安装的 MySQL 条目。

Untitled

通过这种方式安装好的 MySQL 位于 /usr/local/ 目录下。

.zshrc 文件中配置 mysql 命令路径为 export PATH=/usr/local/mysql/bin:$PATH 就能在命令行中使用 mysql 命令了。

我们可以通过 mysql -u root -p 命令来使用密码进入数据库,查看数据库中的 database 列表。

➜  ~ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.1.0 MySQL Community Server - GPL
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
.... 

数据库的文件默认是存储在 /usr/local/mysql/data 文件夹中,不过普通用户没有权限查看,可以通过 sudo chmod 命令修改文件夹权限,这样就能查看,不过不建议这么做,防止意外删除文件导致无法访问数据库文件。

不过通过命令行的方式查看数据库内容多少有点不够直观,我找了一个第三方查看 MySQL 数据库的工具 Navicat Premium

此软件的安装方式不赘述了,这里假设已经安装好,只介绍查看本地数据库的流程

点击 Connections 按钮,选择弹出框里的 MySQL 选项。

Untitled

Untitled

在弹出对话框中为当前连接起名字,并且填好用户名(默认是root)和密码(安装过程我们设置好的密码),点击 Next 就能看到此连接了。

Untitled

Untitled

默认 MySQL 带了四个 databases,我们新建一个 databases 用来存放我们自己的表数据内容,新建方式如下,点击 New Database,然后再弹出框设置 Database 名字和字符集信息,确认就好了。

Untitled

Untitled

具体查看数据库内容的方式就不赘述了,网上很多教程,有机会以后再写,本教程目的不在于此。

# 数据准备

在我们的数据库中预先准备好表和几条数据,通过如下命令生成 Student 表。

//建表
CREATE TABLE Student (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
//插入数据
INSERT INTO Student (name, age) VALUES ('John Doe', 20);
INSERT INTO Student (name, age) VALUES ('Jane Smith', 22);
INSERT INTO Student (name, age) VALUES ('Bob Johnson', 19);

生成数据如图

Untitled

# IDEA 查看数据库

除了 Navicat 之外,IDEA 本身也能查看数据库,具体流程如图

Untitled

Untitled

Untitled

能看到刚新建的 Student 表里的内容,表示配置没有问题。

# 工程配置

我们之前的 HelloWorld 项目访问数据库需要安装两个依赖 mysql-connector 以及 mybatis

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>

# mysql-connector 和 mybatis

mysql-connector-java 是 MySQL 提供的 JDBC 驱动包,用 JDBC 连接 MySQL 数据库时必须使用该 jar 包,它的主要用于与数据库建立连接,对数据进行处理

JDBC 的全称是 Java 数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。

MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。

# 创建数据库表对应的类

新建 package 为 model,在 model 下创建 Student 类,内容如下

@Data
public class Student {
    private int id;
    private  String name;
    private  int age;
}

Untitled

这里先不管 @Data 注解的含义,接下来会继续分析此项目

# 编写Mapper.xml

新建 resources 文件夹,然后是 com.fanthus.mapper 嵌套文件夹存放 mapper 文件,接着新建 StudentMapper.xml 文件。内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fanthus.mapper">
    <select id="listAllStudents" resultType="com.fanthus.springpractice.model.Student">
        select * from Student;
    </select>
</mapper>

Untitled

xml 文件里的 resultType 属性指向的是上面刚建好的 Student 类,尝试在 resultType 值上按住 Command 键,并单击鼠标,可以直接跳转到 Student 类,能正常跳转表明创建的没有问题。

mapper 文件内容接下来会介绍

# 数据库配置文件(MyBatisConfig.xml)

继续在 resources 文件夹下创建 MyBatisConfig.xml 数据库配置文件,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/fanthus?useSSL=false"/>
                <property name="username"  value="root"/>
                <property name="password" value="替换为你的密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/fanthus/mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

Untitled

这里面有两个注意的地方

  1. url 的地方需要增加 useSSL=false 的参数,否则会报连接数据库错误,参考这里 (opens new window)

    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    
  2. 下面的 mapper 节点里, resource 值是 com/fanthus/mapper/StudentMapper.xml, 而不是 com.fanthus.mapper.StudentMapper.xml。这种写法是路径的写法,点连接符是类的写法。

# 整体测试

新建和 main 目录平级的测试文件夹 test 文件夹,然后创建 java 文件夹,继续新建 com.fanthus.test 包,最后创建 MyBatisTest.java 测试文件,内容如下

package com.fanthus.test;
import com.fanthus.springpractice.model.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;

public class MyBatisTest {
    @Test
    public void  test() throws IOException{
        //获得核心配置文件
        InputStream in = Resources.getResourceAsStream("MyBatisConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        // 打开一个新的 SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
				// 查找数据
        List<Student> students = sqlSession.selectList("com.fanthus.mapper.listAllStudents");
        System.out.println(students);
        sqlSession.close();  //关闭
    }
}

Untitled

执行结果输出结果,能查到我们内置的数据,测试通过

18:29:21.576 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@e4487af]
**18:29:21.580 [main] DEBUG com.fanthus.mapper.listAllStudents - ==>  Preparing: select * from Student;
18:29:21.609 [main] DEBUG com.fanthus.mapper.listAllStudents - ==> Parameters: 
18:29:21.630 [main] DEBUG com.fanthus.mapper.listAllStudents - <==      Total: 3
[Student(id=1, name=John Doe, age=20), Student(id=2, name=Jane Smith, age=22), Student(id=3, name=Bob Johnson, age=19)]**
...

Process finished with exit code 0

# 总结

至此支持 MyBatis+MySQL 的配置搞定,至少把架子搭起来了,接下来熟悉一下 MyBatis 的一些配置,比如这些 XML 之间的关系等。

参考地址:

  1. 2.4 Installing MySQL on macOS (opens new window)
  2. 什么是JDBC?这篇文章告诉你 (opens new window)
  3. 编程帮-MyBatis是什么? (opens new window)
  4. IDEA(maven)+mybatis+mysql实现数据库查询操作 (opens new window)

关注我的微信公众号,我在上面会分享我的日常所思所想。