1.新建项目

现阶段我们只需要新建Maven项目即可,后文不再赘述。
image.png
新建项目之后需要更改文件编码为UTF-8,不然在之后的运行程序的时候有可能会因为文件编码问题报错。
QQ截图20220223110656.png

2.添加POM依赖

这一步相当于我们做普通项目时的导入jar包到lib文件夹中,只不过使用maven方便下载管理。
image.png
寻找依赖可以通过官方文档找,也可以通过mvnrepository找https://mvnrepository.com/。比如在本文中需要先导入mybatis依赖,我们只需要在这个网站搜索mybatis,选择对应的版本即可。
image.png

  1. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.5.9</version>
  6. </dependency>

image.png
报红是因为第一次使用本地还没有下载相关的依赖,我们点击加载maven变更,maven就会自动从远程仓库下载依赖。
但其实每次对POM文件进行更改之后都需要点击加载变更。
Windows 8.x x64-2022-02-22-21-54-28.png

如果发现刷新时间过长,记得上设置里检查一下maven设置,是否用的配置了阿里云的maven

同理,添加下列依赖。

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <version>5.8.2</version>
  <scope>test</scope>
</dependency>

3.配置数据源

我们需要在IDEA中配置相应的数据源,以便IDEA识别和提示。
在IDEA的右侧有“数据库”标签,选择标签打开边栏。选择创建MySQL数据源
image.png
依次填写用户名(默认为root)、密码、下载jdbc驱动,测试连接是否正常。
QQ截图20220222222120.png
image.png
确定后默认跳转到查询控制台,数据源配置完毕。
image.png

4.创建测试数据库

随便创建一些数据。可以在IDEA的查询控制台中执行,也可以在Workbench里执行。

create database mybatis;                /*创建数据库*/
create table mybatis.Users
(
    UUID      varchar(36) primary key,
    role      varchar(15) not null,
    name      varchar(20) not null unique,
    password  varchar(20) not null,
    timestamp timestamp default current_timestamp
);                                      /*创建表*/
insert into mybatis.Users (UUID, name, role, password)
values (UUID(), 'root', 'root', 'root'),
       (UUID(), 'admin', 'administrators', 'admin'),
       (UUID(), 'user1', 'user', 123456),
       (UUID(), 'user2', 'user', 123456),
       (UUID(), 'user3', 'user', 123456);/*添加数据*/

image.png

5.配置mybatis-config.xml

这一步是为了让MyBatis知道应该连接哪个数据库和连接数据库需要的信息。
在resources文件夹下新建mybatis-config.xml。

<?xml version="1.0" encoding="UTF8" ?>
<!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"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/><!--数据库驱动-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8"/><!--连接的数据库地址-->
                <property name="username" value="root"/><!--数据源用户名-->
                <property name="password" value="123456"/><!--数据源密码-->
            </dataSource>
        </environment>
    </environments>
</configuration>

6.编写工具类

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
这里以第二种方式举例。
在src下新建包utils用于存放实体类(目的是明确架构便于管理),新建MybatisUtil类。

package utils;

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 java.io.IOException;
import java.io.InputStream;

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }

}

7.编写实体类

在src下新建包pojo用于存放实体类,新建Users类。

package pojo;

public class Users {
    private String UUID;
    private String role;
    private String name;
    private String password;
    private String timestamp;

    @Override
    public String toString() {
        return "Users{" +
                "UUID='" + UUID + '\'' +
                ", role='" + role + '\'' +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", timestamp='" + timestamp + '\'' +
                '}';
    }

    public Users() {
    }

    public Users(String UUID, String role, String name, String password, String timestamp) {
        this.UUID = UUID;
        this.role = role;
        this.name = name;
        this.password = password;
        this.timestamp = timestamp;
    }

    public String getUUID() {
        return UUID;
    }

    public void setUUID(String UUID) {
        this.UUID = UUID;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }
}

看似代码很长,其实实际需要写的只是变量,剩余的getset方法、toString、构造函数等等IDE会自动生成。

其实这里生成的这些函数不会全部用到,只是因为习惯问题,我习惯把常用的这些函数都生成。 当然也可以使用lombok之类的工具。

image.png

8.编写mapper

在src下新建包dao负责访问数据库进行数据的操作。
对于Mybatis来说,我们需要新建一个接口和一个对应的xml文件编写SQL。

image.png

如果有SQL基础的话,对于前文新建的数据库,我们想要查询所有信息,语句可以是这样:

select * from mybatis.users

那么在MyBatis中,我们需要对这句话进行适当的“包装”,让MyBatis知道什么时候用这句话,这句话是什么类型,都应该传哪些参数进来(这一点在学习动态SQL的时候才能体现)。

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserMapper"><!--namespace要对应接口-->
    <select id="queryUsers" resultType="pojo.Users">
        <!--这是一个select,也就是查询语句;id是标识符;resultType定义返回结果的类型-->
        select *
        from mybatis.users
    </select>
</mapper>

我们在对应的接口中也需要声明函数。

package dao;

import pojo.Users;

import java.util.List;

public interface UserMapper {
    List<Users> queryUsers();
}

如果安装了MyBatisX插件,当这些完成后,对应的语句前面会有猫头鹰图标对应跳转指示。 image.pngimage.png

最后记得在mybatis-config.xml中声明mapper所在位置。

<mappers>
    <mapper resource="dao/UserMapper.xml"/>
</mappers>

9.编写测试类并运行测试

在test/java文件夹中新建一个测试类。

import dao.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import pojo.Users;
import utils.MybatisUtil;

import java.util.List;

public class MyTest {
    @Test
    public void queryUsers(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();    //从 SqlSessionFactory 中获取 SqlSession
        UserMapper mapper = sqlSession.getMapper(UserMapper.class); //getMapper
        List<Users> users = mapper.queryUsers();    //调用接口开始查询
        for (Users item:users){
            System.out.println(item);
        }   //遍历结果输出到控制台
        sqlSession.close(); //查询完毕关闭数据库连接
    }
}

现在运行可能会报错提示找不到xml文件,是因为Maven的静态资源过滤问题。需要在pom.xml中添加:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

再次测试运行。
image.png