mybatis-plus快速上手
1.创建maven工程
2.添加pom依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
3.创建实体类
package com.example.mybatisplus.entity;
import lombok.Data;
@Data
public class User {
private Integer id;
private String name;
private Integer age;
}
4.创建Mapper接口
package com.example.mybatisplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatisplus.entity.User;
public interface UserMapper extends BaseMapper<User> {
}
5.application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8
username: root
password: 1qaz@WSX
#想在运行时打印sql日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6.启动类添加@MapperScan("mapper所在包")注解
package com.example.mybatisplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisplusApplication.class, args);
}
}
7.测试
package com.example.mybatisplus.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 userMapper;
@Test
void test(){
userMapper.selectList(null).forEach(System.out::println);
}
}
常用注解
注:默认通过entity名字与数据表名匹配,如果名字匹配不上需要添加注解映射
@TableName
映射数据库表名
@Data
@TableName(value = "user")
public class UserEntity {
private Integer id;
private String name;
private Integer age;
}
@TableId
设置主键映射,value属性是数据库主键字段名
type属性设置主键类型,主键的生成策略
AUTO(0),
NONE(1),
INPUT(2),
ASSIGN_ID(3),
ASSIGN_UUID(4),
/** @deprecated */
@Deprecated
ID_WORKER(3),
/** @deprecated */
@Deprecated
ID_WORKER_STR(3),
/** @deprecated */
@Deprecated
UUID(4);
值 | 描述 |
---|---|
AUTO | 数据库自增,会把id返回给java对象,即使开发者赋id值也取数据库的 |
NONE | MybatisPlus(MP) set主键,雪花算法实现 |
INPUT | 需要开发者手动赋值(开发者没有赋值,则数据库自增方式) |
ASSIGN_ID | MP分配id,Long、Integer、String,雪花算法 |
ASSIGN_UUID | 分配UUID,主键类型必须String |
@TableField
字段映射,value属性是数据库字段名
exist属性表示是否是数据库字段
select属性表示是否查询该字段
fill属性表示是否自动填充,将对象存入数据库的时候由MP自动给某些字段赋值,如create_time、update_time
@Data
@TableName(value = "user")
public class UserEntity {
@TableId(value = "id",type = IdType.ASSIGN_ID)
private Long id;
@TableField(value = "name")
private String userName;
@TableField(value = "age")
private Integer age;
@TableField(exist = false)
private String gender;
//驼峰和数据库下划线会自动转换
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
fill填充的值需要创建处理器赋值
package com.example.mybatisplus.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);
}
}
@Version
标记乐观锁,通过version字段保证数据的安全性,当修改数据的时候,会以version作为条件,满足条件才修改
添加配置类:
package com.example.mybatisplus.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
@EnumValue
1.通过注解方式完成枚举类映射
通用枚举类注解,将数据库字段映射成实体类的枚举类型成员变量
枚举类:(加@EnumValue注释)
package com.example.mybatisplus.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
public enum StatusEnum {
WORK(1,"上班"),
REST(0,"休息");
@EnumValue
private Integer code;
private String msg;
StatusEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}
实体类:加枚举类型
@Data
@TableName(value = "user")
public class UserEntity {
@TableId(value = "id",type = IdType.ASSIGN_ID)
private Long id;
@TableField(value = "name")
private String userName;
@TableField(value = "age")
private Integer age;
@TableField(exist = false)
private String gender;
//驼峰和数据库下划线会自动转换
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version;
private StatusEnum status;
}
application.yml
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#枚举包扫描
type-enums-package: com.example.mybatisplus.enums
这几步配置后,查询出来的结果如下:
2.实现接口方式实现枚举类映射
package com.example.mybatisplus.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.core.enums.IEnum;
public enum AgeEnum implements IEnum<Integer> {
ONE(1,"一岁"),
TWO(2,"两岁");
@EnumValue
private Integer code;
private String msg;
AgeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public Integer getValue() {
return this.code;
}
}
@TableLogic
映射逻辑删除
-
数据表添加deleted字段
-
实体类添加注解
实体类添加:
@TableLogic
private Integer deleted;
- application.yml添加配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#枚举包扫描
type-enums-package: com.example.mybatisplus.enums
global-config:
db-config:
logic-not-delete-value: 1
logic-delete-value: 0
CRUD
这里的api可以去官网查看
MyBatis Plus自动生成
根据数据表生成实体类和Mapper、Service等...
- pom依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
启动类
package com.example.mybatisplus;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class Main {
public static void main(String[] args) {
//创建generator对象
AutoGenerator autoGenerator = new AutoGenerator();
//数据源
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("1qaz@WSX");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
autoGenerator.setDataSource(dataSourceConfig);
//全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
globalConfig.setOpen(false);
globalConfig.setAuthor("niuwang");
autoGenerator.setGlobalConfig(globalConfig);
//包信息
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example.mybatisplus");
packageConfig.setModuleName("generator");
packageConfig.setController("controller");
packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");
packageConfig.setMapper("mapper");
packageConfig.setEntity("entity");
autoGenerator.setPackageInfo(packageConfig);
//配置策略
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setEntityLombokModel(true);
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
autoGenerator.setStrategy(strategyConfig);
autoGenerator.execute();
}
}
部分表生成:
strategyConfig.setInclude("user","product");
- 注:该知识点是在B站学习‘楠哥教你学java’的视频中学习到的,大家有兴趣可以去B站大牛站学习