MyBatis-Plus初次实践(附代码)

发布时间 2023-10-09 17:25:36作者: 一只特立独行的鸭嘴兽

引言

我们都非常熟悉MyBatis这一框架,可以说是非常便捷的轻量级持久层ORM框架,便于开发者们对数据库进行操作。

MyBatis-Plus

1.找到MyBatis-Plus官网

官网链接

image

首先要引入MyBatis的Maven依赖,如果是spring boot则可引入starter包,更加便捷

【数据库数据源在application配置文件里自定义配置】

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

既然是持久层框架,那么肯定要有数据库,官网的数据库脚本如下

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);
DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

创建实体类

package com.tobie.mybatisplusdemo.pojo;

import com.baomidou.mybatisplus.annotation.OrderBy;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Tobieance
 * @description
 * @date 2023-10-09 08:35
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

2、MyBatis-Plus基础CRUD

一些基础的CRUD基础操作都已实现,只需要直接继承官方提供的接口即可

甚至不需要像MyBatis一样创建mapper映射文件

package com.tobie.mybatisplusdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tobie.mybatisplusdemo.pojo.User;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author Tobieance
 * @description
 * @date 2023-10-09 08:36
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

测试代码

@Test
void testSelectAll() {
    List<User> userList = userMapper.selectList(null);
    for (val u:userList) {
        log.info(u.toString());
    }
}

测试结果
image

3、MyBatis-Plus注解

MP提供了很丰富的注解供开发者使用,以下只拿三个举例说明

  • @TableName
    • 描述:表名注解,标识实体类对应的表
    • 使用位置:实体类
  • @TableId
    • 描述:主键注解
    • 使用位置:实体类主键字段
  • @OrderBy
    • 内置 SQL 默认指定排序,优先级低于 wrapper 条件查询
    • asc:是否正序,默认为false
    • sort:默认值为Short类型的最小值

4、MyBatis-Plus 条件构造器(核心)

条件构造器是MyBatis-Plus功能的核心,各种条件的筛选都由条件构造器生成

AbstractWrapper:

QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类
用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件

提供各种方法来进行筛选,如notlike,eq,in,or等等与sql关键字相似的方法

具体参考官方文档

5、实践(注解,条件构造器)

实体类:

package com.tobie.mybatisplusdemo.pojo;

import com.baomidou.mybatisplus.annotation.OrderBy;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Tobieance
 * @description
 * @date 2023-10-09 08:35
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("user")
public class User {
    @TableId
    private Long id;
    private String name;
    @OrderBy(asc = true)
    private Integer age;
    private String email;
}

测试类

 @Test
    void testSelect() {
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.select("name","age","email");
        List<User> userList = userMapper.selectList(queryWrapper);
        for (val u:userList) {
            log.info(u.toString());
        }
    }

测试结果:

只选择name,age和email字段,并且以age升序排列

image