1.新建项目
现阶段我们只需要新建Maven项目即可,后文不再赘述。
新建项目之后需要更改文件编码为UTF-8,不然在之后的运行程序的时候有可能会因为文件编码问题报错。
2.添加POM依赖
这一步相当于我们做普通项目时的导入jar包到lib文件夹中,只不过使用maven方便下载管理。
寻找依赖可以通过官方文档找,也可以通过mvnrepository找https://mvnrepository.com/。比如在本文中需要先导入mybatis依赖,我们只需要在这个网站搜索mybatis,选择对应的版本即可。
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
报红是因为第一次使用本地还没有下载相关的依赖,我们点击加载maven变更,maven就会自动从远程仓库下载依赖。
但其实每次对POM文件进行更改之后都需要点击加载变更。
如果发现刷新时间过长,记得上设置里检查一下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数据源
依次填写用户名(默认为root)、密码、下载jdbc驱动,测试连接是否正常。
确定后默认跳转到查询控制台,数据源配置完毕。
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);/*添加数据*/
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&useUnicode=true&characterEncoding=UTF-8&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之类的工具。
8.编写mapper
在src下新建包dao负责访问数据库进行数据的操作。
对于Mybatis来说,我们需要新建一个接口和一个对应的xml文件编写SQL。
如果有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插件,当这些完成后,对应的语句前面会有猫头鹰图标对应跳转指示。
最后记得在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>
再次测试运行。