1.1 什么是MyBatis
MyBatis是一款优秀的持久层框架,它能够帮助Java开发者将业务逻辑与数据访问代码分离,具有简单、灵活和高效的特点。MyBatis使用XML或注解方式描述Java对象及其SQL语句之间的映射关系,它支持多种数据库和操作方式,并且可以满足不同的数据访问需求。
1.2 MyBatis框架发展历史
MyBatis最初是一个由Clinton Begin在2002年开发的持久层框架,最初的名字是iBATIS(Internet BATIS)。iBATIS的目标是帮助开发人员在Java应用中使用简单的SQL语句实现持久化操作,从而大大降低了应用的开发和维护成本。
2010年,Google将iBATIS的代码库托管在了Google Code上,并将其更名为MyBatis,以便更易于开发商和用户的记忆和使用。此后,MyBatis不断完善并推出了更多的版本。
总的来说,MyBatis是一个源于社区、经过不断完善、广泛应用的开源项目。MyBatis凭借其简单易用和高效可靠的特点,成为了Java开发中最受欢迎的持久层框架之一。
1.3 MyBatis与JDBC的关系
在编程中,高级工具的一个主要作用是提高代码的开发效率。高级工具背后的逻辑是对一组操作进行分析,抽取出其中重复的、不变的部分,封装在一个库中供用户使用,使用户仅需要关注那些变化的部分。
以JDBC操作为例,横向对比多次数据库访问的代码,开发者会发现,JDBC的标准6步操作中,每次变化的部分是:
- 每次执行的SQL语句不同,或SQL中绑定的参数不同
- 对结果集进行操作的逻辑不同
MyBatis的主要作用是让开发者在编写数据库访问代码时,仅需要关注要执行的SQL语句,参数与SQL的绑定关系以及结果集的处理逻辑,其他部分由MyBatis代为完成。
MyBatis底层使用的仍是JDBC技术。
1.4 在Spring Boot项目中使用MyBatis框架
在Java项目中单独使用MyBatis框架的配置较为复杂。在实际开发中,通常使用Spring Boot整合MyBatis框架,由Spring Boot来简化相关配置。
在Spring Boot项目中使用MyBatis框架一般需要如下步骤。
1、引入MyBatis依赖
2、在Spring Boot中配置MyBatis框架
3、编写Mapper接口
- 使用接口中的抽象方法来声明要执行的数据库操作
4、编写Mapper.xml映射文件或者在接口中添加注解
- Mapper.xml文件用于描述Java对象和SQL语句之间的映射关系
- 简单的SQL语句可以通过在Mapper接口的方法前添加注解来实现
5、用Mapper接口方法调用映射语句
1.5 MyBatis案例
本案例基于Maven,在Spring Boot项目中操作。首先,在项目的pom.xml文件中添加对MyBatis框架的依赖。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
然后,在src/main/resources文件夹中新建application.properties文件,该文件是Spring Boot项目的默认配置文件。在该文件中添加项目的配置信息:
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=root
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
接下来,在项目中新建mapper包,并在包下创建UserMapper接口,在接口中声明要执行的抽象方法,并添加必要的注解。其中:
- 【@Mapper】注解用于通知Spring Boot项目,当前接口是一个MyBatis框架使用的接口
- 【@Select】注解用于绑定该抽象方法执行的SQL语句
代码示意如下:
import com.obj.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
/**
* 查询所有用户信息
* @return
*/
@Select("select * from user")
List<User> listAllUser();
}
接下来,编写listAllUser方法的测试用例,对方法的功能进行验证。这里可以使用IDEA提供的快捷方式来生成测试用例。操作步骤如下:
- 使用鼠标左键点击UserMapper接口内的任意一行,让光标停留在UserMapper接口的大括号中
- 点击鼠标右键,在菜单中选择【Generate…】,在子菜单中选择【Test…】
- 在弹出的对话框中勾选listAllUser方法前的复选框,然后点击【OK】,生成测试用例
- IDEA会在src/test/java的对应包下生成接口对应的测试类UserMapperTest
import com.obj.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class UserMapperTest {
@Autowired
UserMapper userMapper;
@Test
void listAllUser() {
List<User> list = userMapper.listAllUser();
list.forEach(System.out::println);
}
}
测试用例中代码的逻辑如下:
- 类前添加的@SpringBootTest注解用于将该类声明为一个基于Spring Boot框架的测试类
- userMapper变量前添加的@Autowired注解用于通知Spring Boot框架执行MyBatis框架的相关机制,动态生成一个UserMapper接口的实现类的对象,并为userMapper变量赋值
- listAllUser方法前的@Test注解用于标记该方法为一个测试方法,可以在测试框架构建的环境下执行
- listAllUser方法中的代码为测试用例实际执行的逻辑,本例中通过调用userMapper接口中的listAllUser方法,查询数据库表中的全部用户信息,并输出到控制台
开发完成后,点击listAllUser方法前的运行按钮,执行测试方法,查看IDEA的控制台中能否正确输出查询到的结果,效果如下图所示: