前言
编写本教程的目的:因为自己在查阅教程的时候经历过不太愉快的经历,所以就希望其他人能够避免我经历过的事情。因为他人的强大会激励自己变得更强大。所以读者的强大就是我的强大。这是一篇更加适合初学者的教程,如果你没有相关经验,那么这篇文章会很适合你。希望这篇文章能够帮助到你。话不多说,直接开始。
流程快速预览
- 准备数据源
- 搭建好项目框架
- 导入依赖
- 创建配置文件
- 创建工具类
- 创建实体类
- 创建mapper接口
- 创建映射文件
- 配置文件记录映射文件地址
- 测试类测试
开始搭建
数据源准备
在正式开始之前,确保你已经有了一个数据库,没有的话,请新建一个。然后我为你提供了一个数据表和表中的一条记录。这将是我们后续用于测试的辅助工具。
请按照以下步骤生成示例SQL代码:
- 打开你的数据库工具(例如,Navicat),确保已经连接到数据库服务器。
- 创建一个新的数据库(例如,命名为"mybatis_example")。(有的话,忽略这一步。)
- 在查询编辑器中输入以下SQL代码:
-- 创建示例数据表
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age INT NOT NULL
);
-- 插入示例数据
INSERT INTO student (name, age) VALUES ('John', 25);
搭建好项目框架
按照图例创建项目框架。
图表 1
图表 2
图表 3
图表 4
(这是后面补的一张图,里面的内容现在不用加。)
图表 5
导入依赖
将下面代码粘贴到你的pom.xml文件下
<dependencies>
<!-- 开始导入依赖-->
<!-- junit 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- log4j 日志记录-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<!-- Druid 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
<!-- MyBatis 框架 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- MySQL 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
</dependencies>
示例图例
图表 6
图表 7
创建配置文件
在resources文件夹下新建文件,文件名为“mybatis.xml”。
图表 8
粘贴下方代码到配置文件
<?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"> <!--这里的网址如果检测不到,就回看添加依赖时候的检测方法,多刷新几次就好了。-->
<!-- MyBatis核心配置文件 -->
<configuration>
<!-- 环境配置 -->
<environments default="development">
<environment id="development">
<!-- 事务管理器配置 -->
<transactionManager type="JDBC"/>
<!-- -->
<!-- 数据源配置 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!--需要注意的是,msql8之前 不用加cj 这一步对应驱动,也就是mysql的连接依赖 -->
<!-- 这一步用于连接到数据库 bankdb 这里是你自己的数据库名 characterEncoding=UTF-8 这里指定的是字符串的格式-->
<property name="url" value="jdbc:mysql://localhost:3306/bankdb?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/> <!--用户名 -->
<property name="password" value="root"/> <!-- 密码 -->
</dataSource>
</environment>
</environments>
</configuration>
创建log4j配置文件
图表 9
粘贴以下代码到配置文件内
# 设置根日志级别为DEBUG,将日志输出到A1 Appender
log4j.rootLogger=DEBUG, A1
# 将org.apache包下的日志级别设置为DEBUG
log4j.logger.org.apache=DEBUG
# 定义A1 Appender,将日志输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# 设置A1 Appender的日志输出格式
log4j.appender.A1.layout.ConversionPattern=[Log4j] %-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
创建工具类
这个工具类用于获取和管理 MyBatis 的 SqlSession 实例。通过 SqlSession 实例,可以进行数据库操作。
粘贴以下代码到自己的工具类,工具类命名为“MybatisUtil”
private static SqlSessionFactory factory;//新建静态的SqlSession 实例对象 // 在类加载时初始化 SqlSessionFactory
static {
try {
// 获取配置文件路径
String resource = "mybatis.xml";
// 通过资源流读取 MyBatis 配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 构建 SqlSessionFactory
factory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取一个新的 SqlSession 实例。
*
* @return SqlSession 实例
*/
public static SqlSession getSqlSession() {
// 注意:参数 false 表示不自动提交事务
return factory.openSession(false);
}
/**
* 关闭 SqlSession 实例。
*
* @param sqlSession 要关闭的 SqlSession 实例
*/
public static void closeSqlSession(SqlSession sqlSession) {
if (sqlSession != null) {
sqlSession.close();
}
}
创建实体类
按照最开始提供的表来做,注意实体类表名要和数据表的名字对应。所以表名应该是“Student”
private int id; // 学号
private String name; // 姓名
private int age; // 年龄
// 重写toString方法,用于方便输出Student对象的信息
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
// Getter方法,用于获取学号
public int getId() {
return id;
}
// Setter方法,用于设置学号
public void setId(int id) {
this.id = id;
}
// Getter方法,用于获取姓名
public String getName() {
return name;
}
// Setter方法,用于设置姓名
public void setName(String name) {
this.name = name;
}
// Getter方法,用于获取年龄
public int getAge() {
return age;
}
// Setter方法,用于设置年龄
public void setAge(int age) {
this.age = age;
}
创建mapper接口
接口的名字也有一定规范,规范的主要目的是要望文生义。就是便于理解。这里的接口名为“IStudentDao”
粘贴以下代码到接口文件内。(接口中一般只定义方法即可)
/**
* 查询所有学生信息
* @param id
* @return
*/
Student selAll(String id) throws Exception;
创建映射文件
创建映射文件,跟创建MYBatis的配置文件一样,都是xml的后缀,只是内容不一样。
图表 10
粘贴下方代码到映射文件内
<?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.xja.studay.mapper.IStudentDao">
<select id="selAll" resultType="com.xja.studay.entity.Student">
SELECT * FROM student
</select>
</mapper>
配置文件记录映射文件地址
这一步是比较容易出现错误的地方。主要就是工具缓存的问题或者自己的路径名称不对。这里右键点击文件,然后有个复制类别,选择合适的类别就好了。路径不要尝试手写。
图表 11
将下方代码粘贴到配置文件内
<!-- 这是 MyBatis 的映射器配置部分 -->
<mappers>
<!-- 使用 <mapper> 标签来指定一个映射文件 -->
<mapper resource="xml/StudentDao.xml"></mapper>
</mappers>
图表 12
测试类测试
还记得最初的测试结构吗?现在就可以派上用场了。新建测试文件,注意名称不要重复。
图表 13
新建好之后,粘贴以下代码到测试类中
@Test
public void testSelAll() {
// 获取一个 SqlSession 实例,用于与数据库交互
SqlSession session = MybatisUtil.getSqlSession();
// 通过 SqlSession 获取 StudentDao 接口的实例
IStudentDao dao = session.getMapper(IStudentDao.class);
String id = "1"; // 要查询的学生的学号
try {
Student student = new Student();
// 调用接口方法执行查询操作
student = dao.selAll(id);
System.out.println(student); // 输出查询结果
} catch (Exception e) {
System.out.println("selAll方法执行时异常:" + e.getMessage());
throw new RuntimeException(e);
} finally {
// 关闭资源,释放数据库连接
MybatisUtil.closeSqlSession(session);
}
}
运行之后会是这个样子。
图表 14
别的是日志内容,就不用管。
常见报错
静态初始化错误
找不到相关映射文件
解决办法:
- 检查自己的路径是否正确,记住,不要尝试手写!用复制的方式得到路径地址。
- 刷新IDE或当前工具缓存。不会的话就重启电脑。
查询返回值错误
解决方法:更换为正确的返回路径即可
其实细心的按照步骤来的话,就不会有什么错误。当然,希望你不会遇到错误。
MyBatis的作用
其实它的作用就是帮你写了数据访问层的代码。让你能够有更多的精力放到业务逻辑层上。没有它的话。就要写大量的数据访问层的代码,而且那些代码有固定的规律,也就是重复代码。感谢它的出现。让程序员的工作减轻了一些。
最后希望这篇文章能够帮助到你,若有幸能帮助到你,那将是我的荣幸。