MyBatis Plus 极简入门

MyBatis Plus 是一款基于 MyBatis 数据持久化的国产开源框架,其核心功能就是简化 MyBatis 的开发,提高效率。

MyBatis-Plus (opens new window)(简称MP)是一个MyBatis (opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。

1.快速上手 MyBatis Plus

SpringBoot 2.3.7 + MyBatis Plus 3.4.2(国产的开源框架,并没有接入到 Spring 官方孵化器中)

1、创建 SpringBoot 的空白项目,导入 MyBatis Plus 依赖;

说明:如果在【关系型数据库】中没有【MyBatis Plus Framework】这一选项,则需要手动地在 pom.xml 文件中引入 MyBatis Plus 的依赖。

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

2、创建实体类

package com.trainingl.entity;

import lombok.Data;
import java.util.Date;

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private Date loginTime;
}

3、创建 Mapper 接口

package com.trainingl.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.trainingl.entity.User;
//基础接口
public interface UserMapper extends BaseMapper<User> {
    
}

4、在 application.yml 中配置数据源

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

5、测试类

package com.trainingl;

import com.trainingl.entity.User;
import com.trainingl.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class Springboot007ApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads() {
        //无查询条件
        List<User> users = userMapper.selectList(null);
        for (User user:users) {
            System.out.println(user);
        }
    }

}

控制台显示内容:

MyBatis Plus 是对 MyBatis 的封装,自动完成 SQL 语句的执行以及结果集的映射,提供了很多接口,开发者可以直接调用后,拿到相应的结果,不需要定义 SQL 以及结果集到 Java 的映射。

2.常用注解

如果实体类中的成员变量和数据表中的字段不一致,可以通过注解的形式进行映射解决。

1、 @TableName:映射数据表的表名;

2、 @TableId:设置主键映射,value 映射主键字段名,type 设置主键类型,即主键的生成策略。Eg:@TableId(value = "id", type = IdType.AUTO)

描述
AUTO数据库自增
NONE没有设置
INPUT需要开发者手动赋值
ASSIGN_IDMP 分配 ID,Number / String 类型
ASSIGN_UUIDMP 分配 UUIN,String 类型

INPUT 如果开发者没有手动赋值,则数据库通过自增方式给主键赋值,如果开发者手动赋值,则直接存入该值;

AUTO 默认就是数据库自增,开发者无需赋值;

ASSGIN_ID MyBatis Plus 自动赋值,赋值采用的是雪花算法;

ASSIGN_UUID 主键的数据类型必须是 String,自动生成 UUID 进行赋值;

3、 @TableField 映射非主键字段,value 映射字段名,exist 表示是否为数据库段,若 exist = false 则表示实体类中的成员变量在数据库中没有对应的字段;

package com.trainingl.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;

@Data
@TableName("user")
//将实体类student与user表映射起来
public class Student {
    //将实体类属性与表的字段映射起来
    @TableId(value = "id", type = IdType.AUTO)
    private Integer num;
    @TableField("username")
    private String name;
    @TableField("password")
    private String pwd;
    @TableField(value = "login_time",exist = false)
    private Date onlineTime;
}

3.字段自动填充

@TableField 映射其他字段时,fill 自动填充,MyBatis Plus 自动给字段赋值,常用于时间类型的数据。

比如:在用户信息或订单管理等场景下,经常会有两个字段 createTimeupdateTime 来记录数据的增加和更新时间。

1、给表添加 create_time、update_time 字段;

2、实体类中添加成员变量;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;

@Data
@TableName("user")
//将实体类student与user表映射起来
public class Student {
    //将实体类属性与表的字段映射起来
    @TableId(value = "id", type = IdType.AUTO)
    private Integer num;
    @TableField("username")
    private String name;
    @TableField("password")
    private String pwd;
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

3、创建自动填充处理器

package com.trainingl.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class DataHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject){
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

4、测试类编写测试方法

import com.trainingl.entity.Student;
import com.trainingl.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class Springboot007ApplicationTests {

    @Autowired
    private UserMapper userMapper;
    
    @Test
    void updateData(){
        Student student = new Student();
        student.setName("张三");
        student.setPwd("12306");
        //调用插入方法
        int count = userMapper.insert(student);
        System.out.println(count);
    }

}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐