MyBatis 和 MyBatis-Plus 入门指南:新手必读
在 Java 开发中,持久层的设计和实现是非常重要的一环。MyBatis 和 MyBatis-Plus 是两个广泛使用的数据库访问框架,它们可以帮助我们更高效地与数据库进行交互。本篇博客将详细介绍这两个框架的基本使用方法,并附有代码注释,帮助新手更好地理解和实践。
一、什么是 MyBatis 和 MyBatis-Plus?
1.1 MyBatis
MyBatis 是一个数据持久层框架,提供了 SQL 映射的能力。它允许开发者直接编写 SQL 语句,并将结果映射到 Java 对象中。主要特点包括:
- SQL 控制:开发者可以完全控制 SQL 的编写。
- 灵活性:适合需要复杂 SQL 查询的场景。
- 配置方式:支持 XML 配置和注解方式。
1.2 MyBatis-Plus
MyBatis-Plus 是 MyBatis 的增强版,旨在简化 MyBatis 的使用,提供了许多便捷的功能:
- 自动代码生成:根据数据库表自动生成实体类、Mapper 接口等。
- 通用 CRUD 操作:内置常用的 CRUD 方法,减少手动编写 SQL 的需要。
- 条件构造器:简化复杂查询的编写。
- 性能优化:提供分页插件、逻辑删除等功能。
二、如何使用 MyBatis
2.1 添加依赖
在 Maven 项目中,首先需要添加 MyBatis 的依赖。下面的代码块是 pom.xml
文件中的配置:
<dependency>
<!-- MyBatis 核心库 -->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.12</version> <!-- 根据实际需要选择版本 --></dependency><dependency>
<!-- MyBatis 与 Spring 集成的库 -->
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.8</version> <!-- 根据实际需要选择版本 --></dependency><dependency>
<!-- MyBatis 与 Spring Boot 集成的库 -->
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.8</version> <!-- 如果使用 Spring Boot --></dependency>
2.2 配置 MyBatis
创建 mybatis-config.xml
文件来配置 MyBatis。这个配置文件告诉 MyBatis 如何加载和管理映射文件:
<configuration>
<!-- 指定 Mapper XML 文件的位置 -->
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers></configuration>
2.3 定义 Mapper 接口
定义一个 Mapper 接口来描述数据库操作。@Select
注解用于定义 SQL 查询:
package com.example.mapper;
import com.example.model.User;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
/**
* 根据 ID 查询用户
* @param id 用户 ID
* @return User 对象
*/
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(int id);
}
2.4 创建 Mapper XML 文件(可选)
如果你喜欢使用 XML 来定义 SQL 查询,可以创建 Mapper XML 文件。这个文件用于描述 SQL 语句和映射关系:
<?xml version="1.0" encoding="UTF-8" ?><mapper namespace="com.example.mapper.UserMapper">
<!-- 查询用户信息的 SQL 语句 -->
<select id="getUserById" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select></mapper>
2.5 配置数据源和 SqlSessionFactory
在 Spring 配置文件中设置数据源和 SqlSessionFactory
。数据源用于连接数据库,SqlSessionFactory
用于创建 SQL 会话:
@Configuration@MapperScan("com.example.mapper")
public class MyBatisConfig {
@Bean
public DataSource dataSource() {
// 创建和配置数据源
return new DriverManagerDataSource("jdbc:mysql://localhost:3306/testdb", "user", "password");
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
// 创建 SqlSessionFactory 对象
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
return sessionFactoryBean.getObject();
}
}
2.6 使用 Mapper
在服务层中使用 Mapper 接口来执行数据库操作。下面的代码展示了如何使用 UserMapper
查询用户信息:
@Servicepublic class UserService {
@Autowired
private UserMapper userMapper;
/**
* 根据用户 ID 获取用户信息
* @param id 用户 ID
* @return User 对象
*/
public User getUser(int id) {
return userMapper.getUserById(id);
}
}
三、如何使用 MyBatis-Plus
3.1 添加依赖
在 Maven 项目中,添加 MyBatis-Plus 的依赖。下面的代码块是 pom.xml
文件中的配置:
<dependency>
<!-- MyBatis-Plus Starter,用于简化配置 -->
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version> <!-- 根据实际需要选择版本 --></dependency>
3.2 配置 MyBatis-Plus
在 application.yml
文件中配置 MyBatis-Plus。这里设置了 Mapper 文件的位置和全局配置:
mybatis-plus:
mapper-locations: classpath*:/mapper/*.xml
global-config:
db-config:
id-type: auto # 主键生成策略为自增
3.3 创建实体类
定义与数据库表对应的实体类。使用 @TableName
注解指定表名,@TableId
注解指定主键生成策略:
@TableName("users")
public class User {
@TableId(type = IdType.AUTO)
private Integer id; // 用户 ID
private String name; // 用户名称
private Integer age; // 用户年龄
// getters and setters
}
3.4 创建 Mapper 接口
使用 MyBatis-Plus 提供的 BaseMapper
接口来进行 CRUD 操作。BaseMapper
提供了通用的 CRUD 方法:
@Mapperpublic interface UserMapper extends BaseMapper<User> {
}
3.5 使用 MyBatis-Plus 提供的功能
在服务层中使用 MyBatis-Plus 的方法来执行数据库操作。例如,使用 selectById
方法根据 ID 查询用户信息:
@Servicepublic class UserService {
@Autowired
private UserMapper userMapper;
/**
* 根据用户 ID 获取用户信息
* @param id 用户 ID
* @return User 对象
*/
public User getUser(int id) {
return userMapper.selectById(id);
}
}
3.6 (可选)创建代码生成器
使用 MyBatis-Plus 的代码生成器自动生成代码。这可以帮助你快速生成实体类和 Mapper 接口:
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator autoGenerator = new AutoGenerator();
// 设置全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir("src/main/java");
globalConfig.setAuthor("author");
globalConfig.setOpen(false);
autoGenerator.setGlobalConfig(globalConfig);
// 设置数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/testdb");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("user");
dataSourceConfig.setPassword("password");
autoGenerator.setDataSource(dataSourceConfig);
// 设置包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example");
autoGenerator.setPackageInfo(packageConfig);
// 执行代码生成
autoGenerator.execute();
}
}
总结
MyBatis 和 MyBatis-Plus 都是强大的持久层框架,可以帮助 Java 开发者简化数据库操作。MyBatis 提供了 SQL 映射的灵活性,而 MyBatis-Plus 在此基础上增加了许多便捷功能,减少了重复的工作。通过本指南,你可以快速上手这两个框架,并在实际项目中应用它们来提高开发效率。希望你能在实践中不断探索,掌握更多的技巧和最佳实践!