• Springboot 根据数据库表自动生成实体类和Mapper,只需三步


    前言

    大家看看下面这个对话:



     ps:你...不会就是诡计多端的吴工吧? 如果恰好是,也没事。
    看完这一篇,学习只有先知和后知,你看完学会了知道了,就行。

    本篇内容:


    根据数据库的表 自动生成 代码:


    ①相关的实体类(包含表字段注释)
    ②相关mapper接口(包含增删改查)
    ③相关mapper.xml (包含增删改查)

    不多说,开始实战演练。

    正文

    先看下我们三步之后做了些啥,工程目录结构 :

    每个红色框就是一步, 三个框,足矣。


    开始开始

    前提

    准备好数据库、表(需要生成实体类、mapper的表):
     

    这是演示实战,就整2张表意思一下: 

    表my_account

    表my_user 

     

    第一步 pom引入依赖

    1. org.mybatis.generator
    2. mybatis-generator-core
    3. 1.3.7
    4. org.mybatis.spring.boot
    5. mybatis-spring-boot-starter
    6. 2.2.2
    7. mysql
    8. mysql-connector-java
    9. runtime
    10. org.springframework.boot
    11. spring-boot-starter-test
    12. test

    第二步 创建自动生成代码配置

    配置文件一 ,用于生成代码时连接数据库拿表数据的。

    generator.properties :

    1. jdbc.driverClass=com.mysql.cj.jdbc.Driver
    2. jdbc.connectionURL=jdbc:mysql://localhost:3306/my_test_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    3. jdbc.userId=root
    4. jdbc.password=123456

    配置文件二 ,用于生成代码时 指定生成的 目录路径、代码函数等。

    generatorConfig.xml :

    1. "1.0" encoding="UTF-8"?>
    2. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    4. "generator.properties"/>
    5. id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
    6. "beginningDelimiter" value="`"/>
    7. "endingDelimiter" value="`"/>
    8. "javaFileEncoding" value="UTF-8"/>
    9. type="org.mybatis.generator.plugins.SerializablePlugin"/>
    10. type="org.mybatis.generator.plugins.ToStringPlugin"/>
    11. type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
    12. type="com.demo.mybatisgen.util.CommentGenerator">
    13. "suppressAllComments" value="true"/>
    14. "suppressDate" value="true"/>
    15. "addRemarkComments" value="true"/>
    16. "${jdbc.driverClass}"
    17. connectionURL="${jdbc.connectionURL}"
    18. userId="${jdbc.userId}"
    19. password="${jdbc.password}">
    20. "nullCatalogMeansCurrent" value="true" />
    21. "com.demo.mybatisgen.model" targetProject="src\main\java"/>
    22. "mybatis.mapper" targetProject="src\main\resources"/>
    23. type="XMLMAPPER" targetPackage="com.demo.mybatisgen.mapper"
    24. targetProject="src\main\java"/>
    25. "%" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
    26. enableSelectByExample="false" selectByExampleQueryId="false">
    27. "useActualColumnNames" value="false"/>
    28. "constructorBased" value="false"/>
    29. "id" sqlStatement="JDBC" identity="true"/>

    这个是使用备注添加器(第三步的内容):

    第三步 创建代码生成器 Generator

    CommentGenerator.java:

    1. import org.mybatis.generator.api.IntrospectedColumn;
    2. import org.mybatis.generator.api.IntrospectedTable;
    3. import org.mybatis.generator.api.dom.java.Field;
    4. import org.mybatis.generator.internal.DefaultCommentGenerator;
    5. import org.mybatis.generator.internal.util.StringUtility;
    6. import java.util.Properties;
    7. /**
    8. * @Author: JCccc
    9. * @Date: 2022-7-13 10:09
    10. * @Description: 注释添加
    11. */
    12. public class CommentGenerator extends DefaultCommentGenerator {
    13. private boolean addRemarkComments = false;
    14. /**
    15. * 设置用户配置的参数
    16. */
    17. @Override
    18. public void addConfigurationProperties(Properties properties) {
    19. super.addConfigurationProperties(properties);
    20. this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    21. }
    22. /**
    23. * 给字段添加注释
    24. */
    25. @Override
    26. public void addFieldComment(Field field, IntrospectedTable introspectedTable,
    27. IntrospectedColumn introspectedColumn) {
    28. String remarks = introspectedColumn.getRemarks();
    29. //根据参数和备注信息判断是否添加备注信息
    30. if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
    31. addFieldJavaDoc(field, remarks);
    32. }
    33. }
    34. /**
    35. * 给model的字段添加注释
    36. */
    37. private void addFieldJavaDoc(Field field, String remarks) {
    38. //文档注释开始
    39. field.addJavaDocLine("/**");
    40. //获取数据库字段的备注信息
    41. String[] remarkLines = remarks.split(System.getProperty("line.separator"));
    42. for (String remarkLine : remarkLines) {
    43. field.addJavaDocLine(" * " + remarkLine);
    44. }
    45. addJavadocTag(field, false);
    46. field.addJavaDocLine(" */");
    47. }
    48. }

    Generator.java :

    1. import org.mybatis.generator.api.MyBatisGenerator;
    2. import org.mybatis.generator.config.Configuration;
    3. import org.mybatis.generator.config.xml.ConfigurationParser;
    4. import org.mybatis.generator.internal.DefaultShellCallback;
    5. import java.io.InputStream;
    6. import java.util.ArrayList;
    7. import java.util.List;
    8. /**
    9. * @Author: JCccc
    10. * @Date: 2022-7-13 10:09
    11. * @Description: 点它
    12. */
    13. public class Generator {
    14. public static void main(String[] args) throws Exception {
    15. //MBG 执行过程中的警告信息
    16. List warnings = new ArrayList();
    17. //当生成的代码重复时,覆盖原代码
    18. boolean overwrite = true;
    19. //读取我们的 MBG 配置文件
    20. InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
    21. ConfigurationParser cp = new ConfigurationParser(warnings);
    22. Configuration config = cp.parseConfiguration(is);
    23. is.close();
    24. DefaultShellCallback callback = new DefaultShellCallback(overwrite);
    25. //创建 MBG
    26. MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
    27. //执行生成代码
    28. myBatisGenerator.generate(null);
    29. //输出警告信息
    30. for (String warning : warnings) {
    31. System.out.println(warning);
    32. }
    33. }
    34. }

    好了,三步都完事了,再多一步当我输。

    然后点击一下代码生成器Generator 的 main方法:

    可以看到代码生成了:

     

    生成代码的路径就是  generatorConfig.xml 配置的:

    看看实体:

    看看interface mapper(大部分单表的增删改查函数都生成了):
     

    再看看mapper.xml (都有都有):

    复制粘贴,三步完成,我看看以后谁还不会!

    该篇就到这吧。

  • 相关阅读:
    华为手机的10个使用技巧,你知道吗
    CleanMyMac X优秀首选第三方mac清理软件
    HR这个职位会消失?你怎么看?
    极大似然法
    qemu+docker在服务器上搭建linux内核调试环境
    CRM客户管理系统在市面上这么多?应该如何选型?各行业选型CRM必看!
    CompletableFuture异步编程详解
    Tomcat实现七层、四层代理的动静分离
    【Android】【Gradle】
    Killing LeetCode [946] 验证栈序列
  • 原文地址:https://blog.csdn.net/qq_35387940/article/details/125777457