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,string | ASSIGN_ID |
| 分配UUID,主键类型:String | ASSIGN_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;
}
本文介绍了MyBatis Plus的快速上手步骤,包括创建Spring Boot工程、配置实体类和Mapper接口,以及常用注解的详细解释,如@TableId、@TableField的用法和乐观锁@Version的应用。
2974

被折叠的 条评论
为什么被折叠?



