MyBatis快速入门指南
MyBatis快速入门指南
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。本文将通过一个简单的示例,带你快速入门 MyBatis。
1. 创建数据库和表
首先,我们需要创建一个数据库和表,并插入一些测试数据。以下是 SQL 脚本:
-- 如果数据库 `db_mybatis` 存在,则删除该数据库
DROP DATABASE IF EXISTS db_mybatis;
-- 如果数据库 `db_mybatis` 不存在,则创建该数据库
CREATE DATABASE IF NOT EXISTS db_mybatis;
-- 使用数据库 `db_mybatis`
USE db_mybatis;
-- 创建表 `tb_user`,用于存储用户信息
CREATE TABLE tb_user(
-- 用户ID,自增主键
id INT PRIMARY KEY AUTO_INCREMENT,
-- 用户名,唯一且不能为空
username VARCHAR(32) UNIQUE NOT NULL,
-- 用户密码,不能为空
`password` VARCHAR(32) NOT NULL
);
-- 向 `tb_user` 表中插入数据
INSERT INTO tb_user VALUES(NULL,'张三','123456'),(NULL,'李四','654321');
-- 查询 `tb_user` 表中的所有数据
SELECT * FROM tb_user;
2. 创建 Maven 模块并导入依赖
接下来,我们创建一个 Maven 模块,并导入所需的依赖。以下是 pom.xml
文件的内容:
<dependencies>
<!-- MyBatis 核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- MySQL 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!-- JUnit 测试框架 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!-- SLF4J 日志 API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!-- Logback 日志实现 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
3. 配置日志
为了方便调试和查看 SQL 执行情况,我们配置了 Logback 日志框架。以下是 logback.xml
文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台日志输出配置 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<!-- 配置特定包的日志级别 -->
<logger name="com.itheima" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
</logger>
<!-- 全局日志级别配置 -->
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</configuration>
4. 编写 MyBatis 核心配置文件
MyBatis 的核心配置文件用于配置数据库连接信息、事务管理器等。以下是 mybatis-config.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"/>
<dataSource type="POOLED">
<!-- 数据库连接信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3309/db_mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="928151"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
5. 编写 SQL 映射文件
SQL 映射文件用于统一管理 SQL 语句,避免硬编码。以下是 UserMapper.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="test">
<!-- 查询所有用户 -->
<select id="selectAll" resultType="com.itcq.pojo.User">
select * from tb_user
</select>
</mapper>
6. 编写 POJO 类
POJO 类用于映射数据库表中的记录。以下是 User.java
文件的内容:
package com.itcq.pojo;
import java.util.Objects;
public class User {
private Integer id;
private String username;
private String password;
public User() {
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id) &&
Objects.equals(username, user.username) &&
Objects.equals(password, user.password);
}
@Override
public int hashCode() {
return Objects.hash(id, username, password);
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
7. 加载核心配置文件并执行 SQL
最后,我们编写一个测试类,加载 MyBatis 核心配置文件,获取 SqlSessionFactory
对象,并执行 SQL 语句。以下是 App.java
文件的内容:
package com.itcq;
import com.itcq.pojo.User;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Objects;
public class App {
@Test
public void test() {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
SqlSessionFactory sqlSessionFactory = null;
SqlSession sqlSession = null;
try {
// 加载 MyBatis 配置文件
inputStream = Resources.getResourceAsStream(resource);
// 构建 SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取 SqlSession
sqlSession = sqlSessionFactory.openSession();
// 执行 SQL 查询
List<User> users = sqlSession.selectList("test.selectAll");
// 输出查询结果
users.forEach(user -> System.out.println(user));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭 SqlSession
if (!Objects.isNull(sqlSession))
sqlSession.close();
}
}
}
总结
通过以上步骤,我们完成了 MyBatis 的快速入门。我们创建了数据库和表,导入了必要的依赖,配置了日志和 MyBatis 核心文件,编写了 SQL 映射文件和 POJO 类,最后通过测试类执行了 SQL 查询。希望这篇文章能帮助你快速上手 MyBatis,并在实际项目中应用它。