MyBatis Plus菜鸟快速上手

本文介绍了MyBatis Plus的快速上手步骤,包括创建Spring Boot工程、配置实体类和Mapper接口,以及常用注解的详细解释,如@TableId、@TableField的用法和乐观锁@Version的应用。

MyBatis Plus

国产的开源框架,基于MyBatis

核心功能就是简化MyBatis的开发,提高效率。

MyBatis Plus快速上手

1.创建springboot工程

2.导入mybatisplus的依赖

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>

3.创建实体类Users(你自己定一个比较简单的表)

package com.bdh.mybatisplustest.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Users {
    private Integer id;
    private String username;
    private Integer password;
}

4.创建Mapper接口

package com.bdh.mybatisplustest.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bdh.mybatispulstest.entity.Users;

//注入到mybatis-puls
public interface  UserMapper extends BaseMapper<Users> {

}

5.在启动类上加上MyatispulstestApplication上添加上注解*@MapperScan(“com.xxx.xxx.mapper”)*,否则无法加载Mapper bean。

package com.bdh.mybatisplustest;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.bdh.myatispulstest.mapper")
public class MyatispulstestApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyatispulstestApplication.class, args);
    }

}

6.创建一个springboot测试

package com.bdh.mybatisplustest.mapper;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class UserMapperTest {
    @Autowired
    private UserMapper mapper;

    @Test
    void test(){
        mapper.selectList(null).forEach(System.out::println);
    }
}

常用注解

@TableName(value = "xxxx")

映射数据库的表名

package com.bdh.mybatisplustest.entity;

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

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "users")
public class TestName {
    private Integer id;
    private String username;
    private Integer password;
}

*@TableId(value = “xxxx”)@TableField(value = “xxxx”)*的区别

@TableId(value = “xxxx”)特指主键上的修改。所以我在图片上改的就是主键字段 type属性设置主键类型,主键生成策略

@TableField(value = “xxxx”)主要修改非主键的字段如图,exist表示是否为数据库字段,select表示是否要查询某个字段,fill表示是否自动填充
在这里插入图片描述

@TableId(type= “xxxx”)中的 type属性下有那些需要了解的

AUTO(0),
NONE(1),
INPUT(2),
ASSIGN_ID(3),
ASSIGN_UUID(4),
//后3个以及被淘汰,当然你想玩也可以用
/** @deprecated */
@Deprecated
ID_WORKER(3),
/** @deprecated */
@Deprecated
ID_WORKER_STR(3),
/** @deprecated */
@Deprecated
UUID(4);
描述
数据库自增AUTO
MP(mybatis plus)(默认使用) set主键,雪花算法实现NONE
需要开发者手动赋值INPUT
MP 分配ID,主键类型:Long,integer,stringASSIGN_ID
分配UUID,主键类型:StringASSIGN_UUID

AUTO字面意思就是自增且自增大于手动赋值。

NONE这个属性中雪花算法中的id值非常的大,如果使用这个需要对数据库字段的长度和属性进行修改,实体也是如此。

INPUT属性如果你没用主动的设置id值那么数据库会自增其中一个数来填补其中的值。

ASSIGN_ID如默认一样都是使用雪花算法进行注入的。

ASSIGN_UUID属性赋值必须是String类型,且会生成UUID这个字符串,进行赋值#

@TableField(exits= “false”) 中的exits属性用法和作用

exits判断是否是数据库中的字段如果不是false如果是true,如果实体类中没有所对应的字段那么我们则可以使用exits,VO,DTO。

@TableField(fill = “DEFAULT”) 中的exits属性用法和作用

fill表示是否自动填充,将对象存入到数据库中,如时间等信息

public enum FieldFill {
    //字面意思
    DEFAULT,
    INSERT,
    UPDATE,
    INSERT_UPDATE;

    private FieldFill() {
    }
}

1.给需要添加的自动填充的字段加fill

package com.bdh.myatisplustest.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "users")
public class TageName {
    @TableId(value = "id",type = IdType.INPUT)
    private Integer bid;
    @TableField(value = "username")
    private String name;
    private String password;
    @TableField(exist = false)
    private String test;
    @TableField(fill = FieldFill.INSERT)
    private Data createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Data updateTime;

}

2.创建handler配置类

package com.bdh.myatispulstest.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 MyMetaObjectHandler 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);

    }
}

3.进行测试

在这里插入图片描述

@version MyBatis-plus乐观锁的注解

这个注解我就不讲了,如果你多线程基础扎实那么自然很简单如果不行那这个就比较难了。当然使用和原理我会简单的说出来例如

update xxxx 后version在MP下会进行版本的改变如版本1在我们修改某个数据后版本变成2,同时另一个兄弟也正好修改和你相同的字段那么因为你先修改这个字段,他的版本在你修改完一瞬间就已经是2了。那么那位好兄弟因为版本变成2而执行错误(一般就是不执行逻辑不成立)。大概就是这样

用法就是

1.添加注解

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "users")
public class TageName {
    @TableId(value = "id",type = IdType.INPUT)
    private Integer bid;
    @TableField(value = "username")
    private String name;
    private String password;
    @TableField(value = "createTime",fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(value = "updateTime",fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    private int version;

}

2.编写配置类

package com.bdh.myatispulstest.config;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
}

3.测试成功

@EnumValue枚举操作和普通的枚举没什么区别。主要是二种实现一个是接口实现另一个是配置实现

配置实现:

package com.bdh.myatispulstest.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;

public enum StatusEnum {
    Test1(0,"成功"),
    Test2(1,"success");


    StatusEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @EnumValue
    private Integer code;
    private String msg;

}

接口实现:

在这里插入图片描述

这里就不敲一大堆这东西你随便借鉴一下别人的就可以了

umValue;

public enum StatusEnum {
Test1(0,“成功”),
Test2(1,“success”);

StatusEnum(Integer code, String msg) {
    this.code = code;
    this.msg = msg;
}

@EnumValue
private Integer code;
private String msg;

}

我是一个Java开发程序员,目前我有一个web系统需要开发,其需求如下:客户预约场地和管理系统12 个场地预约周期:两周内账号:客户(可预约可取消自己的预约,只看到自己的预约详细信息)、业务和客服(可看到业务员/客服是自己的预约详细信息,可预约、取消自己的预约信息)、管理员(可进行半年内的预约,可预约、取消别人预约的信息)详细信息指的是预约的时候选好时间段后需填写客户名称、手机号、测试项目、类别业务员/客服、产品名称、备注、确认提交按钮。预约好后可在我的订单看到,可选择订单点取消预约和已完成所有操作记录可以在后台看到。注意事项不受超过预约时间限制,例如今天可以预约昨天的(补预约)预约订单完成后,管理员可以在订单上点完成点完成的订单就需要形成需要签名的计时单:选择订单(多订单)选择进行编辑修改形成计时单,填写客户邮箱,客户和工程师IPAD 签字。确认提交提交形成 PDF 发送客户邮箱账号角色分为管理员(所有权限),业务员账号(只可以看到自己的客户的信息)、客户(只可以看到自己的信息),不允许其他人注册,没有账号无法登录。一个大场地下面可能有数量不定的小场地,可以由管理员账号设置,点大场地后 出来下级小场地 然后再预约。请根据上述系统要求,给出一个具体的系统开发设计文档以及推荐的开发技术栈(这是一个web项目,并且前后端不分离,我只能用Java开发,那么该建什么项目,技术栈用哪些?,且前端、页面等等使用什么技术栈比较、快速简单上手开发呢),以及具体库表设计
03-11
我是一个Java开发程序员,目前我有一个web系统需要开发,其需求如下:客户预约场地和管理系统 12 个场地 预约周期:两周内 账号:客户(可预约可取消自己的预约,只看到自己的预约详细信息)、业务和客服(可看到业务员/客服是自己的预约详细信息,可预约、取消自己的预约信息)、管理员(可进行半年内的预约,可预约、取消别人预约的信息) 详细信息指的是预约的时候选好时间段后需填写客户名称、手机号、测试项目、类别业务员/客服、产品名称、备注、确认提交按钮。预约好后可在我的订单看到,可选择订单点取消预约和已完成所有操作记录可以在后台看到。 注意事项不受超过预约时间限制,例如今天可以预约昨天的(补预约) 预约订单完成后,管理员可以在订单上点完成点完成的订单就需要形成需要签名的计时单:选择订单(多订单)选择进行编辑修改形成计时单,填写客户邮箱,客户和工程师IPAD 签字。确认提交提交形成 PDF 发送客户邮箱 账号角色分为管理员(所有权限),业务员账号(只可以看到自己的客户的信息)、客户(只可以看到自己的信息),不允许其他人注册,没有账号无法登录。一个大场地下面可能有数量不定的小场地,可以由管理员账号设置,点大场地后 出来下级小场地 然后再预约。 请根据上述系统要求,给出一个具体的系统开发设计文档以及推荐的开发技术栈(需要适合后端Java开发的技术栈,且前端、页面等等使用什么技术栈比较、快速简单上手开发呢),以及具体库表设计
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值