Java-MyBatisPlus--CRUD操作

  1. 配置日志:
  2. 雪花算法(自动生成id)

    1.  分布式系统的唯一id生成策略  
    2. //    对数据库的中的主键生成策略(uuid,自增id,雪花算法,redis,zookeeper)
      //        ID_WORKER(3),:全局唯一id,默认的
          
      //    主键生成策略:
      //    1.AUTO(0), //自增策略--》数据库设计字段为自增,同时再pojo类中的id字段使用注解 @TableId(type = IdType.AUTO)
      //    2.NONE(1),  //未设置主键
      //    INPUT(2),  //手动输入
      //    ID_WORKER(3), //默认的全局唯一id
      //    UUID(4),  //全局唯一id
      //    ID_WORKER_STR(5); //ID_WORKER 的字符串表示法
          @TableId(type = IdType.ID_WORKER)
          private Long id;
          private String name;
          private int age;
          private String email;
  3. 更新操作:
    1. 自动填充
    2. package com.model.handler;
      
      import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
      import lombok.extern.slf4j.Slf4j;
      import org.apache.ibatis.reflection.MetaObject;
      import org.springframework.stereotype.Component;
      
      import java.util.Date;
      
      import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/18 19:59
       */
      @Component
      @Slf4j
      public class MyMetaObjectHandler implements MetaObjectHandler {
      //    插入时的填充策略
          @Override
          public void insertFill(MetaObject metaObject) {
              log.info("insert fill is start");
              this.setFieldValByName("createTime", new Date(), metaObject);
              this.setFieldValByName("updateTime", new Date(), metaObject);
      
          }
      
      //更新时的填充策略
          @Override
          public void updateFill(MetaObject metaObject) {
              log.info("update fill is start");
              this.setFieldValByName("updateTime", new Date(), metaObject);
          }
      }
    3.  乐观锁:

  4. 查询操作:

    1.    @Test
          public void select(){
              User user = userMapper.selectById(1);
              System.out.println(user.toString());
              List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
              users.forEach(System.out::println);
      
              List<User> users1 = userMapper.selectByMap((Map<String, Object>) new HashMap<>().put("name", "张紫韩"));
              users1.forEach(System.out::println);
          }
    2. 分页查询:

    3.    @Test
          public void page(){
      
              Page<User> page = new Page<>(1,5);
              userMapper.selectPage(page, null);
              List<User> userList = page.getRecords();
              userList.forEach(System.out::println);
              System.out.println("总页数:"+page.getTotal());
      
          }
  5. 删除操作:

    1.  逻辑删除:

    2.     @TableLogic //逻辑删除
          private int deleted;
    3. 逻辑删除,在数据库中不会进行删除,只是跟新deleted字段为1,我们自己无法查询到,但是再数据库中数据还是存在的 

  6. 性能分析插件:

  7. 条件构造器:

  8. 代码生成器:

    1.  
      package com.model;
      
      import com.baomidou.mybatisplus.annotation.FieldFill;
      import com.baomidou.mybatisplus.annotation.IdType;
      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.po.TableFill;
      import com.baomidou.mybatisplus.generator.config.rules.DateType;
      import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
      import org.assertj.core.util.Arrays;
      import org.junit.jupiter.api.Test;
      import org.springframework.boot.test.context.SpringBootTest;
      
      import java.util.ArrayList;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/28 22:18
       */
      public class MyAutoGenerator {
      //    代码自动生成器
          public static void main(String[] args) {
      
      //        代码自动生成器对象
              AutoGenerator autoGenerator = new AutoGenerator();
      
      //        配置策略
      //        1.全局配置
              GlobalConfig globalConfig = new GlobalConfig();
      //        获得文件路径
              String projectPath = System.getProperty("user.dir");
      //        输出文件路径
              globalConfig.setOutputDir(projectPath+"/mybatisplus_demo01/src/main/java");
              globalConfig.setAuthor("张紫韩");
              globalConfig.setOpen(false);
              globalConfig.setFileOverride(false);//是否覆盖
              globalConfig.setServiceName("%sService");//去Service的i前缀
              globalConfig.setIdType(IdType.ID_WORKER);
              globalConfig.setDateType(DateType.ONLY_DATE);
              globalConfig.setSwagger2(true);
      
              autoGenerator.setGlobalConfig(globalConfig);
      
      //        2.设置数据源
              DataSourceConfig dataSourceConfig = new DataSourceConfig();
      
              dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus");
              dataSourceConfig.setSchemaName("public");
              dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
              dataSourceConfig.setUsername("root");
              dataSourceConfig.setPassword("123456");
              autoGenerator.setDataSource(dataSourceConfig);
      
      //      3. // 包配置
              PackageConfig pc = new PackageConfig();
              pc.setModuleName("blog");
              pc.setParent("com.model");
              pc.setEntity("pojo");
              pc.setMapper("mapper");
              pc.setService("service");
              pc.setController("controller");
              autoGenerator.setPackageInfo(pc);
      //
      //        // 自定义配置
      //        InjectionConfig cfg = new InjectionConfig() {
      //            @Override
      //            public void initMap() {
      //                // to do nothing
      //            }
      //        };
      //
      //        // 如果模板引擎是 freemarker
      //        String templatePath = "/templates/mapper.xml.ftl";
      //        // 如果模板引擎是 velocity
      //        // String templatePath = "/templates/mapper.xml.vm";
      //
      //        // 自定义输出配置
      //        List<FileOutConfig> focList = new ArrayList<>();
      //        // 自定义配置会被优先输出
      //        focList.add(new FileOutConfig(templatePath) {
      //            @Override
      //            public String outputFile(TableInfo tableInfo) {
      //                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
      //                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
      //                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
      //            }
      //        });
      //        /*
      //        cfg.setFileCreate(new IFileCreate() {
      //            @Override
      //            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
      //                // 判断自定义文件夹是否需要创建
      //                checkDir("调用默认方法创建的目录,自定义目录用");
      //                if (fileType == FileType.MAPPER) {
      //                    // 已经生成 mapper 文件判断存在,不想重新生成返回 false
      //                    return !new File(filePath).exists();
      //                }
      //                // 允许生成模板文件
      //                return true;
      //            }
      //        });
      //        */
      //        cfg.setFileOutConfigList(focList);
      //        mpg.setCfg(cfg);
      //
      //        // 配置模板
      //        TemplateConfig templateConfig = new TemplateConfig();
      //
      //        // 配置自定义输出模板
      //        //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
      //        // templateConfig.setEntity("templates/entity2.java");
      //        // templateConfig.setService();
      //        // templateConfig.setController();
      //
      //        templateConfig.setXml(null);
      //        mpg.setTemplate(templateConfig);
      //
              // 4.策略配置
              StrategyConfig strategy = new StrategyConfig();
              strategy.setInclude("user","student");//设置要映射的表名,可以设置多个表
              strategy.setNaming(NamingStrategy.underline_to_camel);
              strategy.setColumnNaming(NamingStrategy.underline_to_camel);
              strategy.setEntityLombokModel(true);//自动lombok
              strategy.setLogicDeleteFieldName("delete");//逻辑删除
      //        自动填充
              TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
              TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
              ArrayList<TableFill> list = new ArrayList<>();
              list.add(createTime);
              list.add(updateTime);
              strategy.setTableFillList(list);
      //        乐观锁
              strategy.setVersionFieldName("version");
              strategy.setRestControllerStyle(true);
              strategy.setControllerMappingHyphenStyle(true);//localhost:8080/hello_id_2
      
              autoGenerator.setStrategy(strategy);
      
              autoGenerator.execute();//执行
      
      //        // 公共父类
      //        strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
      //        // 写于父类中的公共字段
      //        strategy.setSuperEntityColumns("id");
      //        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
      //        strategy.setControllerMappingHyphenStyle(true);
      //        strategy.setTablePrefix(pc.getModuleName() + "_");
      //        mpg.setStrategy(strategy);
      //        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
      //        mpg.execute();
      //    }
      
      
          }
      }

       

       
posted @ 2021-07-18 21:46  张紫韩  阅读(110)  评论(0编辑  收藏  举报