MyBatis/MyBatis-plus
mapper层的一些拓展操作
做 两件事情 一是声明为mapper接口 二是继承基类 已经实现了基本的 CRUD 操作
在实际开发中,mapper 层还有许多可以拓展的点和技巧
1. 自定义查询方法
虽然 BaseMapper 提供了基本的 CRUD 操作,但有时你可能需要实现一些复杂的查询。你可以在 mapper
接口中添加自定义方法,并使用 MyBatis 的注解或 XML 来实现。
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
// 自定义查询方法
@Select("SELECT * FROM user WHERE username = #{username}")
List<User> findByUsername(String username);
}
2. 使用 Wrapper 进行复杂查询
MyBatis-Plus 提供了 QueryWrapper 和 UpdateWrapper,可以用于构建复杂的查询和更新条件。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public List<User> getUsersByCondition(String username) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username", username);
return userMapper.selectList(queryWrapper);
}
3. 分页查询
MyBatis-Plus 支持分页查询,可以使用 Page 类进行分页操作。
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
public Page<User> getUsersByPage(int currentPage, int pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
return userMapper.selectPage(page, null); // 可以传入条件
}
4. 批量操作
MyBatis-Plus 也支持批量插入和更新,适合处理大量数据时使用。
public void insertBatch(List<User> userList) {
userMapper.insertBatchSomeColumn(userList); // 批量插入
}
5. 自定义 SQL
如果需要执行复杂的 SQL 语句,可以直接在 mapper 接口中定义使用 @Select、@Insert、@Update 或 @Delete 注解的方法。
@Update("UPDATE user SET password = #{password} WHERE id = #{id}")
void updatePassword(@Param("id") Integer id, @Param("password") String password);
6. 事务管理
在服务层调用 mapper 时,可能需要使用事务。你可以使用 Spring 的 @Transactional 注解来管理事务。
import org.springframework.transaction.annotation.Transactional;
@Transactional
public void createUser(User user) {
userMapper.insert(user);
// 其他操作
}
7. 逻辑删除
MyBatis-Plus 支持逻辑删除,你可以在实体类中使用 @TableLogic 注解来标记逻辑删除字段。
import com.baomidou.mybatisplus.annotation.TableLogic;
public class User {
@TableLogic // 标记为逻辑删除字段
private Integer deleted;
}
8. 性能分析插件
MyBatis-Plus 提供了性能分析插件,可以在开发阶段用于监控 SQL 执行的性能。
@Bean
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
MyBatis/MyBatis-plus
MyBatis 和 MyBatis-Plus 是 Java 开发中常用的持久层框架,用于简化与数据库的交互。以下是对它们的详细介绍,以及在开发中如何有效利用它们的知识。
MyBatis 简介
MyBatis 是一款持久层框架,它消除了绝大部分 JDBC 代码以及手动设置参数和获取结果集的工作。MyBatis 通过简单的 XML 或注解配置即可将 SQL 语句映射成 Java 的 POJO 类,同时可以根据需求灵活自定义 SQL 查询。
MyBatis 的主要特性:
- SQL 映射:
- 使用 XML 文件或注解来定义 SQL 语句,并将 SQL 结果映射到 POJO。
- 可以灵活编写和优化 SQL 语句,适合复杂查询和操作。
- 动态 SQL:
- MyBatis 提供了强大的动态 SQL 特性,允许通过标签(如
<if>、<choose>等)编写复杂的 SQL 语句。 - 使得 SQL 的可读性和灵活性得到很大提升。
- MyBatis 提供了强大的动态 SQL 特性,允许通过标签(如
- 缓存机制:
- MyBatis 支持一级缓存和二级缓存,用于提高查询效率和性能。
- 支持多种数据库:
- MyBatis 支持多种关系型数据库(如 MySQL、Oracle、PostgreSQL 等),并且与主流数据库兼容性良好。
MyBatis 的基本用法:
- 配置 XML 映射文件:定义 SQL 语句及其与 Java 对象的映射。
- 接口与 XML 绑定:通过接口定义方法,并将这些方法映射到 XML 中的 SQL 语句。
MyBatis-Plus 简介
MyBatis-Plus 是在 MyBatis 基础上的增强版,提供了大量便捷功能,使得开发更加高效。MyBatis-Plus 是一款简化 CRUD 操作的增强框架,同时保持了 MyBatis 的灵活性。
MyBatis-Plus 的主要特性:
-
无侵入性:
- MyBatis-Plus 基于 MyBatis 实现,不会对原有的代码和操作产生影响,可以平滑迁移和集成。
-
丰富的内置 CRUD 方法:
- 通过继承
BaseMapper接口,自动获得单表的基本增删改查操作(如selectById、insert、deleteById等),不需要手写常用的 SQL。
- 通过继承
-
Lambda 表达式支持:
- MyBatis-Plus 支持通过 Lambda 表达式来编写查询条件,避免了字符串拼接带来的问题,增强了代码的可读性。
-
// 使用 Lambda 表达式查询 List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>() .eq(User::getAge, 20));
-
强大的分页插件:
- MyBatis-Plus 提供了内置的分页插件,使用非常简单,只需要传入
Page对象即可。
// 分页查询 Page<User> page = new Page<>(1, 10); // 第 1 页,每页 10 条 Page<User> result = userMapper.selectPage(page, null); - MyBatis-Plus 提供了内置的分页插件,使用非常简单,只需要传入
-
代码生成器:
- MyBatis-Plus 提供了强大的代码生成器,能够根据数据库表结构自动生成实体类、Mapper 接口、Service 类等,显著提高开发效率。
-
自动填充:
- 支持数据库表字段的自动填充,例如创建时间、更新时间等,可以通过注解实现自动填充。
@TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; -
逻辑删除:
- 支持逻辑删除,只需要在实体类中标注逻辑删除字段,即可自动处理逻辑删除。
@TableLogic private Integer deleted;
MyBatis 与 MyBatis-Plus 的区别
- 基本 CRUD:MyBatis-Plus 通过继承
BaseMapper接口,可以自动获得常用的 CRUD 方法,而 MyBatis 则需要手动编写。 - 动态 SQL 支持:MyBatis-Plus 保持了 MyBatis 的动态 SQL 特性,因此你可以在需要时编写复杂的 SQL 查询。
- 分页和查询条件:MyBatis-Plus 内置了分页插件和
Wrapper查询条件封装,简化了分页和复杂条件查询的实现。 - 代码生成器:MyBatis-Plus 提供了代码生成器,可以根据表结构生成基本的代码,大幅提升了开发效率。
如何使用 MyBatis-Plus 进行开发
- 引入依赖:在
pom.xml中引入 MyBatis-Plus 相关依赖。 - 配置数据源:在
application.yml中配置数据库连接信息。 - 定义实体类:使用 Lombok 和 MyBatis-Plus 注解定义数据库表对应的实体类。
- 创建 Mapper 接口:继承
BaseMapper接口,自动获取 CRUD 操作。 - 编写 Service 层代码:在 Service 层编写具体的业务逻辑,使用 Mapper 实现对数据库的操作。
- 编写 Controller 层代码:处理前端的请求,调用 Service 层的业务逻辑。
进一步的拓展
- 自定义 SQL:如果项目有一些复杂的业务逻辑,可以通过自定义 SQL 来灵活处理。
- 高级查询:学习如何使用
Wrapper和 Lambda 表达式进行复杂条件查询。 - 插件机制:深入了解 MyBatis-Plus 的插件体系,例如乐观锁、性能分析插件等。
项目分区导航: lombok注解 ⬅️ | 03-MyBatis-MyBatis-plus | ➡️ RestController和Controller
💬 评论