• MyBatisPlus-代码生成器原理及实现


    目录

    一、代码生成器原理分析

    二、代码生成器实现


    一、代码生成器原理分析

    我们在观察之前写的代码的时候,会发现很多重复的内容。

     一个Book模板,,只需要把红色部分的内容全部更换成Book即可。

     所以任何模板的开发,对于这段代码基本都是对红色部分的调整,所以我们把去掉红色内容的东西称为模板,红色部分称为参数,以后只需要传入不同的参数,就可以根据模板创建出不同模块的dao代码。

    处理Dao可以抽取模块,其实我们常见的类都可以进行抽取,只要他们公共部分即可。

    ① 可以根据数据库表的表名来填充

    ② 可以根据用户的配置来生成ID生成策略

    ③到⑨可以根据数据表的字段名称来填充

    所以只要我们知道哪张表进行代码生成,这些内容我们就可以进行填充 

    代码生成,我们需要有以下内容:

    模板:MyBatisPlus提供,可以自己提供,但是麻烦,不建议

    数据库相关配置:读取数据库获取表和字段信息

    开发者自定义配置:手工配置,比如ID生成策略

    二、代码生成器实现

    1、创建一个Maven项目

    2、导入相应的jar包

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <parent>
    5. <groupId>org.springframework.bootgroupId>
    6. <artifactId>spring-boot-starter-parentartifactId>
    7. <version>2.5.1version>
    8. parent>
    9. <groupId>com.itheimagroupId>
    10. <artifactId>mybatisplus_04_generatorartifactId>
    11. <version>0.0.1-SNAPSHOTversion>
    12. <properties>
    13. <java.version>1.8java.version>
    14. properties>
    15. <dependencies>
    16. <dependency>
    17. <groupId>org.springframework.bootgroupId>
    18. <artifactId>spring-boot-starter-webartifactId>
    19. dependency>
    20. <dependency>
    21. <groupId>com.baomidougroupId>
    22. <artifactId>mybatis-plus-boot-starterartifactId>
    23. <version>3.4.1version>
    24. dependency>
    25. <dependency>
    26. <groupId>com.alibabagroupId>
    27. <artifactId>druidartifactId>
    28. <version>1.1.16version>
    29. dependency>
    30. <dependency>
    31. <groupId>mysqlgroupId>
    32. <artifactId>mysql-connector-javaartifactId>
    33. <scope>runtimescope>
    34. dependency>
    35. <dependency>
    36. <groupId>org.springframework.bootgroupId>
    37. <artifactId>spring-boot-starter-testartifactId>
    38. <scope>testscope>
    39. dependency>
    40. <dependency>
    41. <groupId>org.projectlombokgroupId>
    42. <artifactId>lombokartifactId>
    43. <version>1.18.12version>
    44. dependency>
    45. <dependency>
    46. <groupId>com.baomidougroupId>
    47. <artifactId>mybatis-plus-generatorartifactId>
    48. <version>3.4.1version>
    49. dependency>
    50. <dependency>
    51. <groupId>org.apache.velocitygroupId>
    52. <artifactId>velocity-engine-coreartifactId>
    53. <version>2.3version>
    54. dependency>
    55. dependencies>
    56. <build>
    57. <plugins>
    58. <plugin>
    59. <groupId>org.springframework.bootgroupId>
    60. <artifactId>spring-boot-maven-pluginartifactId>
    61. plugin>
    62. plugins>
    63. build>

    代码生成器主要jar包是代码生成器和velocity模板引擎这两个。

    3、表现引导类

    1. @SpringBootApplication
    2. public class Mybatisplus04GeneratorApplication {
    3. public static void main(String[] args) {
    4. SpringApplication.run(Mybatisplus04GeneratorApplication.class, args);
    5. }
    6. }

    4、创建代码生成类

    1. public class CodeGenerator {
    2. public static void main(String[] args) {
    3. //1.获取代码生成器的对象
    4. AutoGenerator autoGenerator = new AutoGenerator();
    5. //设置数据库相关配置
    6. DataSourceConfig dataSource = new DataSourceConfig();
    7. dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
    8. dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC");
    9. dataSource.setUsername("root");
    10. dataSource.setPassword("root");
    11. autoGenerator.setDataSource(dataSource);
    12. //设置全局配置
    13. GlobalConfig globalConfig = new GlobalConfig();
    14. globalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatisplus_04_generator/src/main/java"); //设置代码生成位置
    15. globalConfig.setOpen(false); //设置生成完毕后是否打开生成代码所在的目录
    16. globalConfig.setAuthor("黑马程序员"); //设置作者
    17. globalConfig.setFileOverride(true); //设置是否覆盖原始生成的文件
    18. globalConfig.setMapperName("%sDao"); //设置数据层接口名,%s为占位符,指代模块名称
    19. globalConfig.setIdType(IdType.ASSIGN_ID); //设置Id生成策略
    20. autoGenerator.setGlobalConfig(globalConfig);
    21. //设置包名相关配置
    22. PackageConfig packageInfo = new PackageConfig();
    23. packageInfo.setParent("com.aaa"); //设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径
    24. packageInfo.setEntity("domain"); //设置实体类包名
    25. packageInfo.setMapper("dao"); //设置数据层包名
    26. autoGenerator.setPackageInfo(packageInfo);
    27. //策略设置
    28. StrategyConfig strategyConfig = new StrategyConfig();
    29. strategyConfig.setInclude("tbl_user"); //设置当前参与生成的表名,参数为可变参数
    30. strategyConfig.setTablePrefix("tbl_"); //设置数据库表的前缀名称,模块名 = 数据库表名 - 前缀名 例如: User = tbl_user - tbl_
    31. strategyConfig.setRestControllerStyle(true); //设置是否启用Rest风格
    32. strategyConfig.setVersionFieldName("version"); //设置乐观锁字段名
    33. strategyConfig.setLogicDeleteFieldName("deleted"); //设置逻辑删除字段名
    34. strategyConfig.setEntityLombokModel(true); //设置是否启用lombok
    35. autoGenerator.setStrategy(strategyConfig);
    36. //2.执行生成操作
    37. autoGenerator.execute();
    38. }
    39. }

    代码生成器中的代码内容,我们也可以直接从官方文档中获取代码进行修改

    代码生成器(新) | MyBatis-Plus (baomidou.com)icon-default.png?t=M666https://baomidou.com/pages/779a6e/根据MyBatisPlus版本的选择对应的代码生成器

  • 相关阅读:
    《Linux C/C++服务器开发实践》之第5章 UDP服务器编程
    SG90舵机的pwm信号-使用linux定时器实现控制
    FISCO BCOS区块链固定出块节点 方法
    J2L3x:如何用强大撤回消息功能提高工作效率?
    永磁同步电机滞环电流控制(PI双闭环)matlab仿真模型
    成都理工大学_Python程序设计_第9章
    Dataset 的基础知识和RDD转换为DataFrame
    【云原生之kubernetes实战】部署Octant开源可视化k8s管理平台
    蓝牙运动耳机排行榜,目前排名最好的运动耳机推荐
    idea使用Spring Initializer创建springboot项目的坑【保姆级教学】
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/126114545