MyBatis 是一个流行的Java持久层框架,它将数据库操作封装在易于使用的接口中,从而简化了Java开发者的数据库操作过程。本文将从零开始,逐步引导你掌握MyBatis的使用,并通过实际案例解析来加深理解。
1. MyBatis 简介
MyBatis 通过 XML 或注解的方式配置 SQL 语句,避免了使用JDBC 手动编写 SQL 代码,从而减少了出错的可能性。它具有以下特点:
- 半自动ORM:MyBatis 允许你自定义 SQL 语句,同时它也提供了一些基本的映射规则。
- 易于扩展:MyBatis 支持自定义 SQL 映射,这使得你可以轻松地扩展框架的功能。
- 性能优秀:MyBatis 采用缓存机制,可以减少数据库访问次数,提高性能。
2. MyBatis 快速入门
2.1 环境搭建
- 下载 MyBatis:访问 MyBatis 官网(http://www.mybatis.org/mybatis-3/)下载最新版本的 MyBatis。
- 添加依赖:在你的 Java 项目中添加 MyBatis 依赖。例如,使用 Maven,在
pom.xml文件中添加以下内容:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
- 配置数据库连接:在
src/main/resources目录下创建db.properties文件,配置数据库连接信息:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_db?useSSL=false&serverTimezone=UTC
username=root
password=root
2.2 编写 Mapper 接口
在 src/main/java 目录下创建一个 com.example.mapper 包,并在此包中创建一个 UserMapper 接口:
package com.example.mapper;
import com.example.entity.User;
public interface UserMapper {
User selectById(Integer id);
void insert(User user);
void update(User user);
void delete(Integer id);
}
2.3 编写 Mapper XML
在 src/main/resources 目录下创建一个 com/example/mapper 包,并在此包中创建一个 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="com.example.mapper.UserMapper">
<select id="selectById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insert" parameterType="com.example.entity.User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<update id="update" parameterType="com.example.entity.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="delete" parameterType="integer">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
2.4 编写 Service 层
在 src/main/java 目录下创建一个 com.example.service 包,并在此包中创建一个 UserService 类:
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import javax.annotation.Resource;
import java.util.List;
public class UserService {
@Resource
private UserMapper userMapper;
public List<User> getAllUsers() {
return userMapper.selectById(1);
}
}
2.5 测试
在 src/test/java 目录下创建一个 com.example.service 包,并在此包中创建一个 UserServiceTest 类:
package com.example.service;
import org.junit.Test;
import static org.junit.Assert.*;
public class UserServiceTest {
@Test
public void testGetAllUsers() {
UserService userService = new UserService();
List<User> users = userService.getAllUsers();
assertNotNull(users);
assertEquals(2, users.size());
}
}
运行 UserServiceTest 类的 testGetAllUsers 方法,如果一切顺利,你应该可以看到两个用户的信息。
3. MyBatis 案例解析
以下是一个使用 MyBatis 进行分页查询的案例:
package com.example.mapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper {
List<User> selectByPage(@Param("offset") int offset, @Param("limit") int limit);
}
在 UserMapper.xml 文件中添加以下内容:
<select id="selectByPage" resultType="com.example.entity.User">
SELECT * FROM user LIMIT #{offset}, #{limit}
</select>
在 UserService 类中修改 getAllUsers 方法:
public List<User> getAllUsers(int offset, int limit) {
return userMapper.selectByPage(offset, limit);
}
运行测试方法,你将可以看到分页查询的结果。
4. 总结
本文从零开始,介绍了 MyBatis 的基本概念、环境搭建、入门教程和案例解析。通过本文的学习,你应该能够熟练使用 MyBatis 进行数据库操作。在实际开发过程中,MyBatis 的功能和性能表现会更加明显。祝你学习愉快!
