整个流程是先在自己电脑上安装数据库,然后在项目里配置连接数据库,并配置 MyBatis,最后写单元测试,看下是否能正常从数据库中筛选到数据。
# 安装数据库
MySQL 官方提供了安装包 (opens new window),下载 DMG,然后通过图形界面的方式进行安装。
下图展示了我将要安装的 MySQL 版本,点击 Download 开始进行下载。
下载好之后就跟别的软件一样,通过安装引导程序一路安装就好了,中间有一个地方特别说明一下,就是关于强密码加密模式和经典密码加密模式。我这里为了兼容选择了经典密码加密模式。
最后设置好数据库密码之后,MySQL 数据库就算安装成功了,去系统偏好设置里会看到新安装的 MySQL 条目。
通过这种方式安装好的 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
。
# Navicat Premium
此软件的安装方式不赘述了,这里假设已经安装好,只介绍查看本地数据库的流程
点击 Connections
按钮,选择弹出框里的 MySQL 选项。
在弹出对话框中为当前连接起名字,并且填好用户名(默认是root)和密码(安装过程我们设置好的密码),点击 Next 就能看到此连接了。
默认 MySQL 带了四个 databases,我们新建一个 databases 用来存放我们自己的表数据内容,新建方式如下,点击 New Database
,然后再弹出框设置 Database 名字和字符集信息,确认就好了。
具体查看数据库内容的方式就不赘述了,网上很多教程,有机会以后再写,本教程目的不在于此。
# 数据准备
在我们的数据库中预先准备好表和几条数据,通过如下命令生成 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);
生成数据如图
# IDEA 查看数据库
除了 Navicat 之外,IDEA 本身也能查看数据库,具体流程如图
能看到刚新建的 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;
}
这里先不管 @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>
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>
这里面有两个注意的地方
url 的地方需要增加
useSSL=false
的参数,否则会报连接数据库错误,参考这里 (opens new window)com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
下面的 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(); //关闭
}
}
执行结果输出结果,能查到我们内置的数据,测试通过
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 之间的关系等。
参考地址:
- 2.4 Installing MySQL on macOS (opens new window)
- 什么是JDBC?这篇文章告诉你 (opens new window)
- 编程帮-MyBatis是什么? (opens new window)
- IDEA(maven)+mybatis+mysql实现数据库查询操作 (opens new window)
关注我的微信公众号,我在上面会分享我的日常所思所想。