第5节: 提效插件

Lombook

shop-user-service模块下添加maven依赖

复制代码
<dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
</dependency>

<!--项目中添加 spring-boot-starter-->
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
</dependency>

shop-user-service模块中加入common项目

复制代码
 <dependency>
            <groupId>com.guslegend</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
</dependency>

在聚合工程的pom文件中修改Lombook的作用域范围

复制代码
<!--https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.16-->
<!--scope=provided,说明它只在编译阶段生效,不需要打入包中, Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件-->
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>${lombok.version}</version>
   <!--<scope>provided</scope>-->
</dependency>

Lombok 常用注解说明

  • @Getter / @Setter:作用于类上时,为所有成员变量生成 getter/setter 方法;作用于成员变量上时,仅为该变量生成 getter/setter 方法。
  • @ToString:作用于类,覆盖默认的 toString () 方法,生成包含类信息和成员变量的字符串。
  • @EqualsAndHashCode:作用于类,覆盖默认的 equals 和 hashCode 方法,方便对象之间的比较和哈希操作。
  • @NoArgsConstructor:作用于类,生成无参构造器。
  • @AllArgsConstructor:作用于类,生成包含所有成员变量的全参构造器。
  • @Data:作用于类上,是 @ToString、@EqualsAndHashCode、@Getter、@Setter、@RequiredArgsConstructor 的集合,可简化多个注解的使用。
  • @Log / @Slf4j:作用于类上,生成日志变量,用于记录日志(需项目中已添加 log 依赖)。若注解不生效,需检查 Lombok 插件配置,更新插件并重启 idea。

Mybatis-plus

在开发过程中,当需要编写数据库表的 CRUD 接口时,常规流程往往是先编写实体类,接着依次编写 Controller、Service、DAO,最后还要编写 XML 文件。尤其是在管理后台这类场景中,多数操作都是简单的 CRUD,这时使用普通的 MyBatis 就显得有些鸡肋,流程繁琐且重复劳动较多。

而 MyBatis-Plus(官网:https://baomidou.com/)作为 MyBatis 的增强工具,很好地解决了这一问题。它在 MyBatis 的基础上只做增强不做改变,核心目标是简化开发、提高效率。

其增强之处主要在于:已经封装好了一系列 CRUD 方法,开发者无需再编写 XML 文件,直接调用这些现成的方法即可完成常见的数据操作。这一点类似 JPA,但在功能和灵活性上往往优于 JPA,能让开发者更专注于业务逻辑的实现,减少重复的代码编写工作。

SpringBoot里面整合 ( 添加maven依赖在common模块中 ,并在shop-user模块里面测试 )

复制代码
 <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
</dependency>

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

Mybatis-plus-generator代码自动生成工具

底层是模板引擎技术,可以自定义生成的java类模板

基础版 mybatis-generator

进阶版 mybatis-plus-generator

  • common模块中添加maven依赖

    复制代码
     <!-- 代码自动生成依赖 begin -->
          <dependency>
              <groupId>com.baomidou</groupId>
              <artifactId>mybatis-plus-generator</artifactId>
              <version>3.4.1</version>
          </dependency>
          <!-- velocity -->
          <dependency>
              <groupId>org.apache.velocity</groupId>
              <artifactId>velocity-engine-core</artifactId>
              <version>2.0</version>
          </dependency>
          <!-- 代码自动生成依赖 end-->
  • 代码 ( 需要更改标记TODO的 )

    import com.baomidou.mybatisplus.annotation.DbType;
    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.rules.DateType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

    public class MyBatisPlusGenerator {

    复制代码
      public static void main(String[] args) {
          //1. 全局配置
          GlobalConfig config = new GlobalConfig();
          // 是否支持AR模式
          config.setActiveRecord(true)
                  // 作者
                  .setAuthor("guslegend")
                  // 生成路径,最好使用绝对路径,window路径是不一样的
                  //TODO  TODO  TODO  TODO
                  .setOutputDir("D:\\XM\\shop1024\\dev-ops\\generator")
                  // 文件覆盖
                  .setFileOverride(true)
                  // 主键策略
                  .setIdType(IdType.AUTO)
    
                  .setDateType(DateType.ONLY_DATE)
                  // 设置生成的service接口的名字的首字母是否为I,默认Service是以I开头的
                  .setServiceName("%sService")
    
                  //实体类结尾名称
                  .setEntityName("%sDO")
    
                  //生成基本的resultMap
                  .setBaseResultMap(true)
    
                  //不使用AR模式
                  .setActiveRecord(false)
    
                  //生成基本的SQL片段
                  .setBaseColumnList(true);
    
          //2. 数据源配置
          DataSourceConfig dsConfig = new DataSourceConfig();
          // 设置数据库类型
          dsConfig.setDbType(DbType.MYSQL)
                  .setDriverName("com.mysql.cj.jdbc.Driver")
                  //TODO  TODO  TODO  TODO
                  .setUrl("jdbc:mysql://127.0.0.1:3306/xdclass_user?useSSL=false")
                  .setUsername("root")
                  .setPassword("123456");
    
          //3. 策略配置globalConfiguration中
          StrategyConfig stConfig = new StrategyConfig();
    
          //全局大写命名
          stConfig.setCapitalMode(true)
                  // 数据库表映射到实体的命名策略
                  .setNaming(NamingStrategy.underline_to_camel)
    
                  //使用lombok
                  .setEntityLombokModel(true)
    
                  //使用restcontroller注解
                  .setRestControllerStyle(true)
    
                  // 生成的表, 支持多表一起生成,以数组形式填写
                  //TODO  TODO  TODO  TODO
                  .setInclude("user","address");
    
          //4. 包名策略配置
          PackageConfig pkConfig = new PackageConfig();
          pkConfig.setParent("com.guslegend")
                  .setMapper("mapper")
                  .setService("service")
                  .setController("controller")
                  .setEntity("model")
                  .setXml("mapper");
    
          //5. 整合配置
          AutoGenerator ag = new AutoGenerator();
          ag.setGlobalConfig(config)
                  .setDataSource(dsConfig)
                  .setStrategy(stConfig)
                  .setPackageInfo(pkConfig);
    
          //6. 执行操作
          ag.execute();
          System.out.println("======= guslgened Done 相关代码生成完毕  ========");
      }

    }

  • 导入生成代码

只需要拷贝mapper,mapper.xml,controller模块,service和serviceImpl模块自己编写