代码生成器 Mybatis-plus + Springboot + mysql 自动生成代码操作数据库

代码生成器 Mybatis-plus + Springboot + mysql 自动生成代码操作数据库

导入坐标:

 			<!--mybaties-plus代码生成器-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.1.2</version>
            </dependency>
            <!--mybaties-plus-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
                <version>3.1.2</version>
            </dependency>
            <!--springboot启动mybates-plus-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.1.2</version>
            </dependency>
            <!--freemarker模板-->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.28</version>
            </dependency>
            <!--对mybaties-plus的加强-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>3.1.2</version>
            </dependency>

接下来使用代码构造器生成代码 并配置输出的包:

/**
 * @author zhangfc
 * @description 数据库对应表的生成器
 * @data 2021-04-25 09:37:07
 */
public class MyGeneratorUtil {
    
    

    /**
     * @param tableName
     * @description 创建代码生成器 生成代码指定路径
     */
    public static void createDataBase(String[] tableName) {
    
    
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        //配置输出的位置的根路径
        gc.setOutputDir("D:\\idea_project\\test1\\provider/src/main/java")
                //配置生成代码的作者
                .setAuthor("zhangfc")
                .setOpen(false)
                //是否生成swagge2注解 true 开启 false 关闭
                .setSwagger2(true)
                //生成类的名字 %s是表名
                .setServiceName("%sService");
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        //设置数据库的ip和端口
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/leadnews_user?useSSL=false&&characterEncoding=UTF-8&characterEncoding=utf8&serverTimezone=UTC")
                //设置数据库driver
                .setDriverName("com.mysql.jdbc.Driver")
                //设置数据库帐号
                .setUsername("root")
                //设置密码
                .setPassword("root")
                //自定义表字段类型转换
                .setTypeConvert(new MySqlTypeConvert() {
    
    
                    @Override
                    public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
    
    
                        //数据库中的datetime 类型默认会转换为java中的LocalDateTime 这里自定转换为Data类型
                        if (fieldType.toLowerCase().contains("datetime")) {
    
    
                            return DbColumnType.DATE;
                        }
                        return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
                    }
                });
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig().setParent("com.person").setModuleName("provider");
        mpg.setPackageInfo(pc);
        // 自定义配置 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
        InjectionConfig cfg = new InjectionConfig() {
    
    
            @Override
            public void initMap() {
    
    
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                this.setMap(map);
            }
        };
        // 模板是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
    
    
            @Override
            public String outputFile(TableInfo tableInfo) {
    
    
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return "D:\\idea_project\\test1\\provider/src/main/resources/mapper/"
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        //表名映射到实体的生成策略 大驼峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel)
                //数据库表字段映射到实体 小驼峰 未设置的话按照Naming的策略
                .setColumnNaming(NamingStrategy.underline_to_camel)
                //生成的实体是否为lombok模型(默认是false)
                .setEntityLombokModel(true)
                //生成@Restcontroller控制器
                .setRestControllerStyle(true)
                //自定义继承的Controller类全称
               // .setSuperControllerClass("com.baomidou.ant.common.BaseController")
                //执行的表名
                .setInclude(tableName)
                //驼峰转连字符
                .setControllerMappingHyphenStyle(true)
                //表前缀
                .setTablePrefix("m_");
        mpg.setStrategy(strategy)
                .setTemplateEngine(new FreemarkerTemplateEngine())
                .execute();
    }
}

接下来就可以使用这个工具 进行代码的自动生成了:

@SpringBootTest(classes = ProviderApp.class)
@RunWith(SpringRunner.class)
@Slf4j
public class MyTest {
    
    
    @Test
    public void createMysqlTable(){
    
    
        MyGeneratorUtil.createDataBase(new String[]{
    
    "ap_user","ap_user_realname"});
    }
}

执行之后检查多出的文件:如图:

在这里插入图片描述

接下来就可以对数据库进行增删改查了,这里我还要介绍一个自动生成接口文档的做法,那就是swagger2最初的swagger2的界面很难看而且也不方便操作,我就介绍一种优化过得swagger2的做法.请看下图对比:

1.这是传统的swagger2界面:

在这里插入图片描述

2.这是优化过的swagger2界面:

在这里插入图片描述

​ 由上面对比可看出传统的界面杂乱无章,而且调试很不方面,但优化过的界面则非常简洁,而且调试也特别方便下面就介绍怎么配置优化后的swagger2:

首先导入坐标:

<!--swagger2坐标-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!--swagger ui-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>
<!--美化swagger2界面的坐标-->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.6</version>
</dependency>

然后增加一个swagger2的配置类:

@Configuration//配置注解
@EnableSwagger2//开启传统swagger2界面
@EnableSwaggerBootstrapUI//优化swagger2界面
public class SwaggerConfig {
    
    
    @Bean
    public Docket createRestApi(){
    
    
        return new Docket(DocumentationType.SWAGGER_2)
                .pathMapping("/")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.person"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(new ApiInfoBuilder()
                .title("Swagger2接口文档")
                .description("信息信息...")
                .version("9.0")
                .license("apache license")
                .licenseUrl("http://www.baidu.com")
                .build());
    }
}

接着到controller层设置自己想要展示接口说明:

/**
 * <p>
 * APP用户信息表 前端控制器
 * </p>
 *
 * @author zhangfc
 * @since 2021-04-25
 */
@RestController
@RequestMapping("/provider/ap-user")
@Api(tags = "apuser表的操作")
public class ApUserController{
    
    

    @Autowired
    private ApUserMapper apUserMapper;

    @GetMapping("/findAll")
    @ApiOperation("查询全部数据")
    public List<ApUser> selectAll(){
    
    
        return apUserMapper.selectAll();
    }
}

我该项目的端口号是8011,启动项目后打开浏览器输入http://localhost:8011/doc.html 回车:

在这里插入图片描述

然后就会显示与之对应的接口.

猜你喜欢

转载自blog.csdn.net/m0_51285952/article/details/116121270