mybatis-plus代码自动生成器

1.1 概述

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,是国人在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网。那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!说白了就是为了程序员可以快捷开发,偷懒用的。

1.2 特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

1.3 整合Mybatis-plus

正如官方所说,mybatis-plus在mybatis的基础上只做增强不做改变,因此其与spring的整合亦非常简单。只需把mybatis的依赖换成mybatis-plus的依赖,再把sqlSessionFactory换成mybatis-plus的即可,然后代码生成器还需要添加生成依赖和模板依赖。

 <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>${mybatis-plus-boot-starter.version}</version>
         </dependency>
 ​
     <!-- 代码生成器依赖-->
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>
             <version>3.3.0</version>
         </dependency>
 ​
      <!-- 模板引擎 依赖,MyBatis-Plus 支持 Velocity-->
         <dependency>
             <groupId>org.apache.velocity</groupId>
             <artifactId>velocity-engine-core</artifactId>
             <version>2.1</version>
         </dependency>

1.4 编写yml配置,连接数据库

编写yml配置,同时连接数据库,这一步和 mybatis 基本相同,根据自己所需的配置即可。

server:
   port: 8081
   
 spring:
   datasource:
     url: jdbc:mysql://localhost:3306/jxgl?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
     username: root
     password: 8888
     driver-class-name: com.mysql.cj.jdbc.Driver
     
 mybatis-plus:
   mapper-locations: classpath:mybatis/mapper/*Mapper.xml
   typeAliasesPackage: com.free.fs.model
   global-config:
     db-config:
       id-type: auto
       field-strategy: NOT_NULL
       logic-delete-value: 1
       logic-not-delete-value: 0
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
     mapUnderscoreToCamelCase: true # 开启驼峰命名转换法
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置日志
 ​
 ​
 spring:
     application:
       name: mybatis-plus
     datasource:
       driver-class-name: com.p6spy.engine.spy.P6SpyDriver
       username: root
       password: 8888
       url: jdbc:p6spy:mysql://127.0.0.1:3306/jxgl?characterEncoding=utf-8&useSSL=false
 ​
   logging:
     level:
       root: warn
       com.kaven.mybatisplus.dao: trace
     pattern:
       console: '%p%m%n'

1.5 代码生成器代码

package com.free.fs;
 ​
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 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 java.util.ArrayList;
 import java.util.Scanner;
 ​
 ​
 // 代码自动生成器
 public class KuangCode {
 ​
     /**
      * 读取控制台内容
      */
     public static String scanner(String tip) {
         Scanner scanner = new Scanner(System.in);
         StringBuilder help = new StringBuilder();
         help.append("请输入" + tip + ":");
         System.out.println(help.toString());
         if (scanner.hasNext()) {
             String ipt = scanner.next();
             if (StringUtils.isNotBlank(ipt)) {
                 return ipt;
             }
         }
         throw new MybatisPlusException("请输入正确的" + tip + "!");
     }
 ​
     public static void main(String[] args) {
     // 需要构建一个 代码自动生成器 对象
         AutoGenerator mpg = new AutoGenerator();
     // 配置策略
     // 1、全局配置
         GlobalConfig gc = new GlobalConfig();
         String projectPath = System.getProperty("user.dir");
         gc.setOutputDir(projectPath + "/src/main/java");
         gc.setAuthor("小灰灰");//设置作者
         gc.setOpen(false);
         gc.setFileOverride(false); // 是否覆盖
         gc.setServiceName("%sService"); // 去Service的I前缀
         gc.setIdType(IdType.ID_WORKER);
         gc.setDateType(DateType.ONLY_DATE);
         gc.setSwagger2(true);
         mpg.setGlobalConfig(gc);
     //2、设置数据源
         DataSourceConfig dsc = new DataSourceConfig();
         dsc.setUrl("jdbc:mysql://localhost:3306/jxgl?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");//账号
         dsc.setPassword("");//密码
         dsc.setDbType(DbType.MYSQL);
         mpg.setDataSource(dsc);
     //3、包的配置  生成的代码存放在项目的位置
         PackageConfig pc = new PackageConfig();
     //  pc.setModuleName("jiaxiao");//模块名称
         pc.setParent("com.free.fs");
         pc.setEntity("model");
         pc.setMapper("mapper");
         pc.setService("service");
         pc.setController("controller");
         mpg.setPackageInfo(pc);
     //4、策略配置
         StrategyConfig strategy = new StrategyConfig();
         strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); // 设置要映射的表名
         strategy.setNaming(NamingStrategy.underline_to_camel);
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);
         strategy.setEntityLombokModel(true); 
     // 自动lombok,是否使用lombok完成Entity实体标注Getting Setting ToString 方法;
         strategy.setLogicDeleteFieldName("deleted");
     // 自动填充配置
         TableFill gmtCreate = new TableFill("create_time", FieldFill.INSERT);//创建时间
         TableFill gmtModified = new TableFill("update_time",
                 FieldFill.INSERT_UPDATE);//修改时间
         ArrayList<TableFill> tableFills = new ArrayList<>();
         tableFills.add(gmtCreate);
         tableFills.add(gmtModified);
         strategy.setTableFillList(tableFills);
     // 乐观锁
         strategy.setVersionFieldName("version");
         strategy.setRestControllerStyle(true);//驼峰命名
         strategy.setControllerMappingHyphenStyle(true); //localhost:8080/hello_id_2
         mpg.setStrategy(strategy);
         mpg.execute(); //执行
     }
 }

全局配置(GlobalConfig)

方法说明示例
fileOverride覆盖已生成文件默认值:false
disableOpenDir禁止打开输出目录默认值:true
outputDir(String)指定输出目录/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
author(String)作者名baomidou 默认值:作者
enableKotlin开启 kotlin 模式默认值:false
enableSwagger开启 swagger 模式默认值:false
dateType(DateType)时间策略DateType.ONLY_DATE 默认值: DateType.TIME_PACK
commentDate(String)注释日期默认值: yyyy-MM-dd

包配置(PackageConfig)

方法说明示例
parent(String)父包名默认值:com.baomidou
moduleName(String)父包模块名默认值:无
entity(String)Entity 包名默认值:entity
service(String)Service 包名默认值:service
serviceImpl(String)Service Impl 包名默认值:service.impl
mapper(String)Mapper 包名默认值:mapper
mapperXml(String)Mapper XML 包名默认值:mapper.xml
controller(String)Controller 包名默认值:controller
other(String)自定义文件包名输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>)路径配置信息Collections.singletonMap(OutputFile.mapperXml, "D://")

策略配置(StrategyConfig)

方法说明示例
enableCapitalMode开启大写命名默认值:false
enableSkipView开启跳过视图默认值:false
disableSqlFilter禁用 sql 过滤默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
enableSchema启用 schema默认值:false,多 schema 场景的时候打开
likeTable(LikeTable)模糊表匹配(sql 过滤)likeTable 与 notLikeTable 只能配置一项
notLikeTable(LikeTable)模糊表排除(sql 过滤)likeTable 与 notLikeTable 只能配置一项
addInclude(String...)增加表匹配(内存过滤)include 与 exclude 只能配置一项
addExclude(String...)增加表排除匹配(内存过滤)include 与 exclude 只能配置一项

更多配置查看Mybatis-plus官方文档代码生成器(3.5.1+版本) | MyBatis-Plus (baomidou.com)

1.6 代码生成演示

简单演示一个数据库表生成,下面是数据库表的大体结构

启动代码生成器,控制台输入需要生成的数据库表名称

生成的代码结构如下

1.7 总结

通过 AutoGenerator 可以快速生成 Entity、 Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。同时不影响我们原来mybatis项目,只需要简单改变一下依赖和配置,我们就可以使用mybatisplus偷懒了,同时mybatisplus还有很多方便的功能,例如简单的CRUD 操作,直接调用封装的方法,无需编写xml文件,有兴趣的小伙伴去了解,相信你会爱上这个偷懒神器的。

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值