MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis 的核心优势
1. 简化数据库操作
MyBatis 通过映射文件或注解将 SQL 语句与 Java 对象关联,简化了数据库操作的过程。开发者只需编写简单的 SQL 语句,MyBatis 会自动处理数据库连接、参数设置、结果集转换等繁琐的工作。
2. 高效的性能
MyBatis 在执行 SQL 语句时,会缓存 SQL 映射语句,避免了重复解析 SQL 语句的开销。此外,MyBatis 还支持自定义 SQL 缓存,进一步提高性能。
3. 易于扩展
MyBatis 提供了丰富的插件机制,允许开发者自定义 SQL 映射、事务管理等操作,满足不同场景下的需求。
MyBatis 的基本使用
1. 添加依赖
在 Maven 项目中,添加以下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-redis</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
2. 配置 MyBatis
在 src/main/resources 目录下创建 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://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3. 编写 Mapper 接口和 XML 映射文件
在 com.example.mapper 包下创建 UserMapper.java 接口:
package com.example.mapper;
import com.example.entity.User;
public interface UserMapper {
User findUserById(Integer id);
}
在 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="findUserById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
4. 使用 MyBatis
在 Spring Boot 项目中,创建 MyBatisConfig.java 配置类:
package com.example.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {
}
在 com.example.service 包下创建 UserService.java 服务类:
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findUserById(Integer id) {
return userMapper.findUserById(id);
}
}
在 com.example.controller 包下创建 UserController.java 控制器:
package com.example.controller;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User findUserById(@PathVariable Integer id) {
return userService.findUserById(id);
}
}
实战案例:查询用户信息
假设我们有一个用户表 user,包含字段 id、name、age 和 email。
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
email VARCHAR(100)
);
1. 创建实体类
在 com.example.entity 包下创建 User.java 实体类:
package com.example.entity;
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
// 省略 getter 和 setter 方法
}
2. 创建 Mapper 接口和 XML 映射文件
在 com.example.mapper 包下创建 UserMapper.java 接口:
package com.example.mapper;
import com.example.entity.User;
public interface UserMapper {
User findUserById(Integer id);
}
在 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="findUserById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
3. 使用 MyBatis 查询用户信息
在 com.example.service 包下创建 UserService.java 服务类:
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findUserById(Integer id) {
return userMapper.findUserById(id);
}
}
在 com.example.controller 包下创建 UserController.java 控制器:
package com.example.controller;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User findUserById(@PathVariable Integer id) {
return userService.findUserById(id);
}
}
通过访问 http://localhost:8080/user/1,即可查询到 ID 为 1 的用户信息。
总结
MyBatis 是一个高效、易用的持久层框架,能够帮助开发者简化数据库操作。通过本文的介绍,相信你已经对 MyBatis 有了一定的了解。在实际项目中,你可以根据自己的需求,灵活运用 MyBatis 的各种功能,提高开发效率。
