[Mybatis-plus]

简介

MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变。Mybatis-plus官网地址

注意,在引入了mybatis-plus之后,不要再额外引入mybatis和mybatis-spring,避免因为版本差异导致的问题。

快速上手

1.导入依赖

根据自身环境的版本选择mybatis-plus版本:

springboot3.+和jdk17以上版本选择mybatis-plus-boot3-starter

XML 复制代码
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot3-starter</artifactId>
    <version>yourversion</version>
</dependency>

其他老版本选择mybatis-plus-boot-starter

XML 复制代码
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-spring-boot3-starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot-starter</artifactId>
    <version>yourversion</version>
</dependency>

2.编写配置:

jdbc连接配置(username、password、驱动)

Mybatis配置(连接池对象、映射文件所在包等)

编写配置的具体形式看自己使用的是spring还是springboot

3.编写实体类和mapper接口

plus提供了一系列默认的sql方法,仅测试可以不用额外自己编写。

常用注解

先看一个示范实体类:

java 复制代码
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class MyUser {
    @TableId(value = "id", type = IdType.AUTO)
    private int id;
    @TableField("name")
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyUser{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

@TableName

用于指定当前实体类对应数据库中哪张表

@TableId

给属性绑定表中的主键,其中type属性是声明主键策略:

IdType.AUTO 数据库自增主键(需数据库支持,如 MySQL 的 AUTO_INCREMENT)

IdType.ASSIGN_ID 雪花算法生成 Long 类型主键(默认策略)

IdType.ASSIGN_UUID UUID 生成字符串类型主键(需字段类型为 String)

IdType.INPUT 手动输入主键(需在代码中赋值)

IdType.NONE 无策略,依赖数据库默认行为

@TableField

给属性绑定表中的列

当然,上述是对应单表的时候。如果你的查询结果对应多张表中的数据,就不再能够用这三个注解了。

我们在多表查询的语句中使用别名,mybatis会自动匹配查询结果和实体类的数据:

java 复制代码
// DTO 类(无需继承任何基类)
public class UserOrderDTO {
    // 用户表字段
    private Long userId;
    private String userName;
    
    // 订单表字段
    private String orderId;
    private BigDecimal orderAmount;
    
    // 其他字段(如关联表的统计信息)
    private Integer totalOrders;
    
    // Getters & Setters
}
XML 复制代码
<!-- XML 中编写 SQL -->
<select id="selectUserOrders" resultType="com.example.dto.UserOrderDTO">
    SELECT 
        u.id          AS userId,
        u.name        AS userName,
        o.order_id    AS orderId,
        o.amount      AS orderAmount,
        COUNT(o.id)   AS totalOrders
    FROM user u
    LEFT JOIN order o ON u.id = o.user_id
    WHERE u.id = #{userId}
    GROUP BY u.id
</select>

条件构造器

条件构造器的相关功能通过一系列Wrapper类实现。

下面是两组示范:

sql语句:select name,email from tb_user where address like 值1 and age>=值2;

java 复制代码
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.select("name","email")
                .like("address","a")
                .gt("age","30");

sql语句:update tb_user set age = age+10 where uid in(1,3,5);

java 复制代码
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.setSql("age = age+10")
                .in("uid", Arrays.asList(1,3,5));
相关推荐
Coder_Boy_8 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934738 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
invicinble8 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟8 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖8 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472469 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
TechWJ10 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
qq_124987075310 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_10 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.10 小时前
Day06——权限认证-项目集成
java