mybatis plus自动生成代码(代码生成器)

参考

05_尚硅谷_搭建项目环境(代码生成器)_哔哩哔哩_bilibili

 调用mp的AutoGenerator可以生成代码,就像java脚本一样,运行即可生成

要求代码生成器脚本不用会写,会修改其中条项生成我们预期的代码即可。

项目整体结构

一、前置:配置application.properties

# 服务端口
server.port=8001
# 服务名
spring.application.name=service-edu
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=190201
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

生成代码需要用到application.properties里的一些配置,比如port和应用名,这些在生成的代码里都有所体现。

第二步:配置如何生成

创建CodeGeneratorTest.java文件
package com.atguigu;

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;
import org.junit.Test;

/**
 * @author
 * @since 2018/12/13
 */
public class CodeGeneratorTest {

    @Test
    public void run() {

        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");//输出路径
        gc.setAuthor("testjava");//设置作者
        gc.setOpen(false); //生成后是否打开资源管理器 没啥用
        gc.setFileOverride(false); //重新生成时文件是否覆盖 一般不覆盖我们的代码
        gc.setServiceName("%sService");	//去掉Service接口的首字母I 更没用
        gc.setIdType(IdType.ID_WORKER_STR); //主键策略
        //DateType.ONLY_DATE 表示使用 java.util.Date 类型作为日期类型,datetime->java.util.Date
        gc.setDateType(DateType.ONLY_DATE);
        gc.setSwagger2(true);//开启Swagger2模式

        mpg.setGlobalConfig(gc);//将配置写入到生成器中

        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("190201");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("eduservice"); //模块名
        pc.setParent("com.atguigu");//包名
        //模块下面的四个包
        pc.setController("controller");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("edu_teacher");//为哪个表生成代码,可以("edu_teacher","abc")生成多张表
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 不用改
        strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀

        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

        mpg.setStrategy(strategy);


        // 6、执行
        mpg.execute();
    }
}

由于生成代码脚本只需要执行一次,所以在Test中写上就行。 

如下为以上代码的解释:

1、创建代码生成器

// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();

2、全局配置

GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");//输出路径
gc.setAuthor("testjava");//设置作者
gc.setOpen(false); //生成后是否打开资源管理器 没啥用
gc.setFileOverride(false); //重新生成时文件是否覆盖 一般不覆盖我们的代码
gc.setServiceName("%sService");	//去掉Service接口的首字母I 更没用
gc.setIdType(IdType.ID_WORKER_STR); //主键策略
//DateType.ONLY_DATE 表示使用 java.util.Date 类型作为日期类型,datetime->java.util.Date
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);//开启Swagger2模式

mpg.setGlobalConfig(gc);//将配置写入到生成器中

基本需要修改的是gc.setIdType(IdType.ID_WORKER_STR); 主键生成策略,其他的不怎么要修改

3、数据源配置

因为脚本无法读取到application.properties,所以要再配置一下数据源,整体还是四部分,driver,链接库名,用户名密码。加了个dbtype。

// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("190201");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);

还是注意添加上时区,serverTimezone=GMT%2B8,不同地区的话如果自动生成时间,那么要以本地时区为准,以及高版本mysql使用的是带cj的driver

4、包配置

// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("eduservice"); //模块名
pc.setParent("com.atguigu");//包名
//模块下面的四个包
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);

com.atguigu.eduservice下面有四个包

5、策略配置

// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("edu_teacher");//为哪个表生成代码,可以("edu_teacher","abc")生成多张表
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 不用改
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀

strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

mpg.setStrategy(strategy);

唯一需要关注的就是strategy.setInclude("edu_teacher");为哪个表生成代码,可以("edu_teacher","abc")生成多张表的代码,其他的不需要动

6、执行生成代码

mpg.execute();

总结

第2和5只有一行代码需要修改,3、4根据我们的需要配置一下,其他的直接照抄即可。

执行

代码生成成功了,四个包下的文件都可以看到了。

生成了:

  • 实体类EduTeacher
  • mapper接口EduTeacherMapper,接口的实现类是mybatis在程序启动时动态生成的(这个需要配置@Mapper注解)
  • controller 里面是空的,需要我们自己写与前端的交互
  • 生成了service的接口和实现

也就是我们只需要自己写controller,其他的直接调用即可

其他注意点:

mybatis在mapper层的增删改操作的返回值都是一个int类型的result,表示最终作用的行数,查操作则返回结果值或实体对象

mybatis在server层的增删改的实现的返回值都是一个bolean类型的值,表示是否修改成功,1为成功,0为失败,查操作则返回结果值或实体对象

猜你喜欢

转载自blog.csdn.net/zxyOVO/article/details/130672592