zoukankan      html  css  js  c++  java
  • MybatisPlus学习笔记

    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

    映射逻辑删除

    1. 数据表添加deleted字段

    2. 实体类添加注解

    实体类添加:

    @TableLogic
    private Integer deleted;
    
    1. 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等...

    1. 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站大牛站学习
  • 相关阅读:
    docker数据卷
    docker容器的启动、停止、运行、导入、导出、删除
    docker镜像的获取、创建、修改、删除、导入操作
    docker使用-spark安装
    python爬虫-3 解析库
    python爬虫-2 requests使用
    NLP-HMM
    NLP-中文分词-预处理
    python爬虫-1环境安装
    学习笔记3
  • 原文地址:https://www.cnblogs.com/niuwang/p/15192894.html
Copyright © 2011-2022 走看看