为了账号安全,请及时绑定邮箱和手机立即绑定

MyBatis-Plus入门教程:快速上手操作与基础应用

标签:
杂七杂八
概述

MyBatis-Plus是MyBatis的增强版,旨在简化代码、提高效率,通过代码生成和集成常用CRUD操作,降低开发者在SQL语句编写和数据操作细节上的工作量,让开发者能更专注于业务实现。使用MyBatis-Plus,能够显著提升开发效率和代码可读性,使其成为构建高效数据驱动应用的理想选择。

MyBatis-Plus简介

MyBatis-Plus(简称MP)是MyBatis的增强版,集成了MyBatis常用的 CRUD 操作,并提供了丰富的便捷方法。借助封装功能,它减少代码冗余,提升代码可读性和维护性,从而允许开发者更加专注于业务逻辑的构建,而非低效的SQL编写及数据操作细节处理。

使用MyBatis-Plus的好处
  • 简化代码:通过封装常用功能,减少开发者重复编写代码的工作量,确保代码结构清晰且一致。
  • 提高效率:减少底层细节处理的时间,加快开发速度与迭代频率。
  • 易于学习:功能设计直观,学习曲线平缓,便于新手快速上手。
  • 高性能:依托于MyBatis的性能优势,执行数据操作高效稳定。
MyBatis-Plus环境搭建

安装MyBatis-Plus

确保已安装Maven或Gradle,使用以下命令添加MyBatis-Plus依赖:

<!-- Maven -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>最新版本号</version>
</dependency>

<!-- Gradle -->
implementation 'com.baomidou:mybatis-plus-boot-starter:最新版本号'

请替换最新版本号为当前可用的最新版本。

整合MyBatis-Plus与Spring框架

确保项目包含Spring框架。在application.propertiesapplication.yml中配置MyBatis-Plus相关属性:

# MyBatis-Plus 配置
mybatis-plus.type-convertor.register=com.baomidou.mybatisplus.convert.empty.Empty2DefaultTypeConvertor
mybatis-plus.global-config.enable-automapping=true
创建MyBatis-Plus配置文件

通常无需额外配置文件,但根据项目需求,可创建配置类来管理和优化MyBatis-Plus的全局配置:

import com.baomidou.mybatisplus.core.ConfigurationCustomizer;

@Configuration
public class MyBatisPlusConfig implements ConfigurationCustomizer {

    @Override
    public void customize(ConfigurationCustomizer configurationCustomizer) {
        configurationCustomizer.customize(config -> {
            // 自定义配置,如开启自动填充
            config.setGlobalConfig(
                    new GlobalConfig()
                            .setAutoFill(true)
                            .setAutoMappingEnabled(true)
            );
        });
    }
}
MyBatis-Plus核心操作

查询操作

查询列表

使用List接口查询多条记录:

List<Article> articles = articleMapper.selectList(null);

分页查询

结合分页插件或使用PageHelper进行分页查询:

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

PageHelper.startPage(pageNumber, pageSize);

Page<Article> pageResult = (Page<Article>) articleMapper.selectList(null);

条件查询

通过Example对象实现复杂的条件查询:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("title", "My Article Title")
        .like("content", "我的文章")
        .orderByDesc("create_time");

List<Article> filteredArticles = articleMapper.selectList(queryWrapper);

插入、更新、删除操作详解

插入操作

Article newArticle = new Article()
        .setTitle("New Article Title")
        .setContent("这是新文章的内容")
        .setCreateBy("author")
        .setCreateTime(new Date());

int rows = articleMapper.insert(newArticle);

更新操作

Article updatedArticle = new Article()
        .setId(articleId)
        .setContent("更新后的内容");

int rows = articleMapper.updateById(updatedArticle);

删除操作

int rows = articleMapper.deleteById(articleId);
常用功能与扩展应用

自定义查询与排序

使用QueryWrapper实现自定义查询和排序:

QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("view_count").last("limit 10");
List<Article> topArticles = articleMapper.selectList(queryWrapper);

分页与条件组合查询

结合PageHelper实现分页和复杂查询:

PageHelper.startPage(pageNumber, pageSize);
List<Article> articles = articleMapper.selectList(new QueryWrapper<Article>()
        .eq("category", "Tech")
        .between("create_time", "2022-01-01", "2023-12-31"));

数据完整性验证与批量操作

数据完整性验证

Article article = new Article()
        .setId(articleId)
        .setTitle("验证文章标题")
        .setContent("验证内容")
        .setCreateBy("验证者")
        .setCreateTime(new Date());

int rows = articleMapper.insert(article);
if (rows == 0) {
    throw new RuntimeException("Content validation failed");
}

批量操作

批量更新或删除记录:

List<Long> articleIds = new ArrayList<>();
articleIds.add(articleId1);
articleIds.add(articleId2);

int rows = articleMapper.updateBatchById(articleIds);
MyBatis-Plus注解与配置详解

主键生成策略与动态SQL

主键生成策略

@Entity
@Table(name = "t_article")
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他字段...
}

// 配置主键生成策略
mybatis-plus.global-config.auto-generated-key=true

动态SQL

通过Mapper接口的注解生成动态SQL,例如使用@SelectProvider

@SelectProvider(type = ArticleSqlProvider.class, method = "getArticlesByKeyword")
List<Article> getArticlesByKeyword(@Param("keyword") String keyword);
public class ArticleSqlProvider {
    public String getArticlesByKeyword(@Param("keyword") String keyword) {
        return "SELECT * FROM t_article WHERE title LIKE CONCAT('%', #{keyword}, '%')";
    }
}

自定义逻辑删除与状态管理

自定义逻辑删除

@Entity
@Table(name = "t_article")
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他字段...

    @TableLogic
    private Boolean deleted;
}

// 配置逻辑删除
mybatis-plus.global-config.logic-delete-value=false
mybatis-plus.global-config.logic-not-delete-value=true

自定义实体类与字段映射

@Entity
@Table(name = "t_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // getter and setter...
}

// 映射关系
@TableId(value = "id", type = IdType.AUTO)
总结与实践建议

实践练习建议

尝试创建一个完整的应用,使用MyBatis-Plus进行数据库操作。可以从简单的CRUD功能开始,逐步增加复杂性,如分页、条件查询、批量操作等。

常见问题与解决策略

  • 问题:实体类属性与数据库表字段不匹配。

    • 解决:确保实体类与数据库表的一对一、一对多、多对多关系正确映射。
  • 问题:分页参数不正确或分页结果错误。
    • 解决:检查PageHelper.startPage参数的正确性,确保查询条件与分页逻辑正确。

持续学习资源推荐

  • 在线教程慕课网提供丰富的MyBatis-Plus学习资源,包括视频教程、实战项目和文档解读。
  • 官方文档:直接参考MyBatis-Plus的官方文档,获取最准确、详细的使用指南和示例代码。
  • 社区与论坛:参与技术社区,如GitHub、Stack Overflow或特定技术论坛,获取来自其他开发者的经验与解答。

通过不断实践和探索,你可以更深入地掌握MyBatis-Plus的功能和用法,从而高效地构建复杂的数据库驱动应用。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消