Mybatis-plus的基础用法

文章目录

      • [1. 核心功能](#1. 核心功能)
        • [1.1 配置与编写规则](#1.1 配置与编写规则)
        • [1.2 条件构造器](#1.2 条件构造器)
        • [1.3 自定义SQL](#1.3 自定义SQL)
        • [1.4 IService接口](#1.4 IService接口)
          • [1.4.1 Lambda方法](#1.4.1 Lambda方法)
          • [1.4.2 批量新增](#1.4.2 批量新增)
        • [1.5 分页查询](#1.5 分页查询)
      • [2. 拓展功能](#2. 拓展功能)
        • [2.1 代码生成器](#2.1 代码生成器)
        • [2.2 DB静态工具](#2.2 DB静态工具)
        • [2.3 逻辑删除](#2.3 逻辑删除)
        • [2.4 枚举处理器](#2.4 枚举处理器)
      • 参考

1. 核心功能

1.1 配置与编写规则

Maven依赖:

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>	

Mapper类:

java 复制代码
public interface UserMapper extends BaseMapper<User> {
}

实体类命名规则:

YAML文件配置:

yaml 复制代码
mybatis-plus:
  type-aliases-package: com.itheima.mp.domain.po
  mapper-locations: "classpath*:/mapper/**/*,xml"
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
  global-config:
    db-config:
      id-type: assign_id
      update-strategy: not_null

MyBatis-Plus中比较常用的几个注解如下:

  • @TableName: 指定表名,使用场景:类名与数据库不符。

  • @TableId: 指定主键字段信息,使用场景:绑定主键。

  • @TableField: 指定普通字段信息,使用场景:字段名不符、变量名是布尔值、字段与数据库关键字冲突。

1.2 条件构造器

实现类里面会用到的:

个人理解:尽量用query。Lambda表达式(User::getId)类似这种,不写死代码。

1.3 自定义SQL

使用场景: update、select需要构建where前面的SQL语句。

java 复制代码
int amount = 200;
QueryWrapper<User> wrapper = new QueryWrapper<User>().in(User::getId, ids);
userMapper.updateBalanceByIds(wrapper, amount);

第一个wrapper参数 一定要加**@Param("ew"),且名字为"ew"**。

java 复制代码
void updateBalanceByIds(@Param("ew") Lambda......, @Param("xx") ....)
xml 复制代码
<update>
	update user SET balance = balance - #{amount} ${ew.customSqlSegment}
</update>
1.4 IService接口

实现原理图:

接口实现层:

java 复制代码
public class UserServiceImpl extends IServiceImpl<UserMapper, User> implements IUserService {
}	

接口抽象层:

java 复制代码
public interface IUserService extends IService<User> {
}
1.4.1 Lambda方法
java 复制代码
return lambdaQuery()
        .like(condition, User::getId, id)
        .eq(xxx)
        .list();
return lambdaQuery()
        .set(xxx)
        .eq(xxx)
        .update();
1.4.2 批量新增

采取批量插入方式:

ps:打开SQL的配置,开启rewriteBatchedStatements=true参数。

java 复制代码
public void saveBatch() {
    List<User> list = new ArrayList<>(1000);
    for (int i = 0; i < 100000; i++) {
        list.add(buildUser(i));
        if (i % 1000 == 0) {
            userService.saveBatch(list);
            list.clear();
        }
    }
}	
1.5 分页查询

先进行分页查询配置:

java 复制代码
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

然后利用Page<>分页操作:

java 复制代码
public Result<Page<Article>> list(Integer pageNum, Integer pageSize, 
                                   @RequestParam(required = false) String categoryId, 
                                   @RequestParam(required = false) String state) {
    Page<Article> page = new Page<>(pageNum, pageSize);
    return Result.success(articleService.page(page));
}

2. 拓展功能

2.1 代码生成器

Java代码生成: 看文件夹代码。

MybatisX: 选中数据库表,右键选中。

MybatisPlus: 点击上方导航栏other,配置数据库,然后点击生成键,配置后生成。

2.2 DB静态工具

这样就不用注入AddressService了。

2.3 逻辑删除

理解:在数据库中加入delete字段(0,1),从逻辑上判断数据是否被删除。

2.4 枚举处理器

用途: 处理Java枚举类与数据库中字段类型不同的问题。

参考

黑马程序员视频

相关推荐
鸽芷咕4 小时前
金仓数据库标量子查询消除:一条SQL从32秒优化到24毫秒
数据库·sql
AI行业学习4 小时前
CC-Switch 下载、安装与使用配置指南【2026.5.29】
java·开发语言·vscode·python·eclipse·laravel
朝阳5814 小时前
MySQL 主从复制 — 双服务器灾备方案(原生安装)
服务器·数据库·mysql
是狐狸吖4 小时前
Redis分布式锁进阶第十六篇
数据库·redis·分布式
闪电悠米4 小时前
黑马点评-优惠券秒杀-04_one_user_one_order
服务器·网络·数据库
许彰午4 小时前
03_Java流程控制详解
java·开发语言·python
YL200404264 小时前
【Redis实战篇】基于Redis的分布式锁的原理及实现
数据库·redis·缓存
兔子宇航员03014 小时前
HiveSQL 中 NULL 与空字符串的区别与注意事项
数据库·数据仓库·sql
霍格沃兹测试学院-小舟畅学4 小时前
接口自动化测试的下一个十年:从脚本到Skills,让AI学会“如何测”
java·前端·人工智能
我命由我123454 小时前
Retrofit - URL 格式错误问题、支持 HTTP 与 HTTPS
java·http·https·java-ee·android studio·android-studio·retrofit