MyBatisPlus从零到一:快速入门与核心功能详解(1)

米饭21小时前行业资讯7

一、快速入门

1.1 引入依赖:

MybatisPlus 提供了 starter,实现了自动 Mybatis 以及MybatisPlus 的自动装配功能,坐标如下:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

这个 starter 包含对 mybatis 的自动装配,因此完全可以替换掉 Mybatis 的starter。


1.2 定义 Mappper:

为了简化单表的 CRUD,MybatisPlus 提供了一个基础的BaseMapper接口,其中已经实现了单表的 CRUD,具体方法如下图所示:

image-20241108140332697

因此我们自定义的 Mapper 只要继承了这个BaseMapper<T>,就无需自己实现单表 CRUD 了。

注意:继承 baseMapper 需要指定对应的实体类。


1.3 使用演示:

//Mapper:
public interface UserMapper extends BaseMapper<User> {
}
//实体类
@Data
public class User {
    private Long id;
    private String username;
    private String password;
    private String phone;
    private String info;
    private Integer status;
    private Integer balance;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

//测试类
@SpringBootTest
class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    void testInsert() {
        User user = new User();
        user.setId(5L);
        user.setUsername("Lucy");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        userMapper.insert(user);// MybatisPlus 提供的
    }

    @Test
    void testSelectById() {
        User user = userMapper.selectById(5L);// MybatisPlus 提供的
        System.out.println("user = " + user);
    }


    @Test
    void testQueryByIds() {
        List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));// MybatisPlus 提供的
        users.forEach(System.out::println);
    }

    @Test
    void testUpdateById() {
        User user = new User();
        user.setId(5L);
        user.setBalance(20000);
        userMapper.updateById(user);// MybatisPlus 提供的
    }

    @Test
    void testDeleteUser() {
        userMapper.deleteById(5L);// MybatisPlus 提供的
    }
}

效果如下图所示:由于方法格式过多,所以下面这张图片只展示更新部分的。

image-20241108162919294


1.4 常见注解:

MybatisPlus 就是根据 PO 实体(BaseMapper<T>中的T)的信息来推断出表的信息,从而生成 SQL 的。默认情况下:


MybatisPlus 会把 PO 实体的类名驼峰转下划线作为表名。

MybatisPlus 会把 PO 实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型。

MybatisPlus 会把名为 id 的字段作为主键。

但很多情况下,默认的实现与实际场景不符,因此 MybatisPlus 提供了一些注解便于我们声明表信息。


1.4.1 @TableName:

使用方式:表名注解,标识实体类对应的表。


使用位置:实体类。


使用场景:当实体类的名称和表名的命名不一致时(驼峰和下划线的区别另外),使用该注解。


TableName 注解除了指定表名以外,还可以指定很多其它属性:

172AFE4A-DE15-4A16-9965-25FD4A9AA797_4_5005_c.jpeg

1.4.2 @TableId:

使用方式:主键注解,标识实体类中的主键字段。

使用位置:实体类的主键字段。

使用场景:需要指定主键时,如果是按照规范进行操作,不需要使用该注解指定,有默认值。

TableId注解支持两个属性:

属性类型必须指定默认值
描述
value
String‘’
主键字段名
typeEnum

IdType.NONE指定主键类型

IdType支持的类型有:

描述
AUTO数据库 ID 自增
NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 ASSIGN_ID)
INPUTinsert 前自行 set 主键值
ASSIGN_ID

分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),

使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法),

简单理解为程序自动利用雪花算法,帮助我们生成 id。


                           

ASSIGN_UUID分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

这里比较常见的有三种:


AUTO:利用数据库的id自增长

INPUT:手动生成id

ASSIGN_ID:雪花算法生成Long类型的全局唯一id,这是默认的ID策略。

1.4.3 @TableField:

使用方式:普通字段注解,标识实体类中的普通属性。


使用位置:实体类的属性。


使用场景:当实体类的命名和数据库的字段名有出路时,使用该注解。


一般情况下我们并不需要给字段添加@TableField注解,一些特殊情况除外(非常重要):


成员变量名与数据库字段名不一致

成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。

成员变量名与数据库一致,但是与数据库的关键字冲突。使用@TableField注解给字段名添加转义字符:``。

支持的其它属性如下:

82659611-CC9D-4212-8EAA-AA4BC8ACF594.jpeg

1.5 常见配置:

MybatisPlus 也支持基于 yaml 文件的自定义配置。


大多数的配置都有默认值,因此我们都无需配置。但还有一些是没有默认值的,例如:


实体类的别名扫描包(用来简化,后续引用实体类的路径。这个即使配置,我还是建议大家把路径写全,因为这个有时会不生效,而且编译器会更加支持写全)。


全局 id 类型。

mybatis-plus:
  type-aliases-package: xxxxxx # 填写实体类对应的包名
  global-config:
    db-config:
      id-type: auto # 全局id类型为自增长

需要注意的是,MyBatisPlus 也支持手写 SQL 的,而 mapper 文件的读取地址可以自己配置:

mybatis-plus:
  mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,当前这个是默认值。

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


相关文章

Gradle 8.4.0 配置阿里云镜像的详细指南

Gradle 8.4.0 配置阿里云镜像的详细指南

引言Gradle 是一个强大的构建工具,广泛用于自动化构建、测试、发布等过程。然而,由于网络原因,Gradle 默认的 Maven 中央仓库访问速度可能较慢,特别是在中国大陆地区。为了提高依赖下载速度...

【Docker 】深入探索 Docker :高阶操作与配置设置(下)

【Docker 】深入探索 Docker :高阶操作与配置设置(下)

四、容器的资源限制Docker 允许用户限制容器使用的系统资源,如 CPU 和内存,从而确保其他容器和主机的稳定性。4.1 限制 CPU 使用要限制容器使用的 CPU 核心,可以使用 --cpus 参...

ubuntu下如何查看显卡及显卡驱动

ubuntu下如何查看显卡及显卡驱动

ubuntu下如何查看显卡及显卡驱动使用nvidia-smi 工具查看查看显卡型号nvida-smi -L$ nvidia-smi -L GPU 0:&nbs...

CentOS7 yum安装报错“Could not resolve host: mirrorlist.centos.org; Name or service not known“之解决办法(换源)

CentOS7 yum安装报错“Could not resolve host: mirrorlist.centos.org; Name or service not known“之解决办法(换源)

yum安装出现错误如下:yum install -y wget && wget -O install.sh https://download.bt.cn/install/install...

MyBatisPlus从零到一:快速入门与核心功能详解(2)

MyBatisPlus从零到一:快速入门与核心功能详解(2)

二、核心功能刚才的案例中都是以 id 为条件的简单 CRUD,一些复杂条件的 SQL 语句就要用到一些更高级的功能了。2.1 条件构造器:除了新增以外,修改、删除、查询的 SQL 语句都需要指定 wh...

gitlab和jenkins连接

gitlab和jenkins连接

一:jenkins 配置安装gitlab插件   生成密钥id_rsa 要上传到jenkins,id_rsa.pub要上传到gitlabcat /root/.ssh/id_rsa复...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。