【SpringBoot】MyBatisPlus代码生成器

项目准备

数据库

MySql 5.7
在这里插入图片描述
新建数据库votedb,新建两个测试表user、vote_theme

user表
在这里插入图片描述
vote_theme表
在这里插入图片描述
建表代码如下

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(25) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_name` varchar(255) DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `phone` varchar(255) DEFAULT NULL COMMENT '手机',
  `email` varchar(255) DEFAULT NULL COMMENT '邮箱',
  `age` int(3) DEFAULT NULL COMMENT '年龄',
  `role` varchar(2) DEFAULT NULL COMMENT '角色',
  `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
  `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1380808280388952067 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for vote_theme
-- ----------------------------
DROP TABLE IF EXISTS `vote_theme`;
CREATE TABLE `vote_theme` (
  `id` bigint(25) NOT NULL COMMENT '主题主键',
  `theme_name` varchar(255) DEFAULT NULL COMMENT '主题名',
  `theme_explain` text COMMENT '相关说明',
  `expectation_sum` bigint(25) DEFAULT '0' COMMENT '总期望值',
  `expectation_times` bigint(25) DEFAULT '0' COMMENT '期望人次',
  `imgurl` varchar(2550) DEFAULT NULL COMMENT '主题图片',
  `end_date` datetime DEFAULT NULL,
  `start_date` datetime DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
  `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

BEGIN;
INSERT INTO `user` VALUES (1358687078200619010, 'wzp', '674f6e6d9b25a084110e992042ad0cdb', '17753657132', '1231@163.com', 22, 'a', '2021-02-08 16:00:17', '2021-07-14 22:43:41');
INSERT INTO `user` VALUES (1358687341250588673, 'admin', '674f6e6d9b25a084110e992042ad0cdb', '17753657132', '124@163.com', 28, 'a', '2021-02-08 16:01:20', '2021-03-11 16:37:55');
INSERT INTO `user` VALUES (1358687744079933441, 'wahahaa', '674f6e6d9b25a084110e992042ad0cdb', '18553777133', '123@126.com', 38, 'u', '2021-02-08 16:02:56', '2021-06-20 14:11:08');
INSERT INTO `user` VALUES (1358693663190769666, 'hanjia', '674f6e6d9b25a084110e992042ad0cdb', '18577657134', '129@163.com', 18, 'u', '2021-02-08 16:26:27', '2021-02-20 11:52:28');
INSERT INTO `user` VALUES (1362299967155175426, 'wanghia', '123', '123132', '2222', 18, 'u', '2021-02-18 15:16:37', '2021-02-18 15:16:37');
INSERT INTO `user` VALUES (1362959351606640641, 'zhangsan', '674f6e6d9b25a084110e992042ad0cdb', '18453657775', '2222@qq.com', 40, 'a', '2021-02-20 10:56:47', '2021-06-20 14:11:16');
INSERT INTO `user` VALUES (1380808280388952066, '123123123', '674f6e6d9b25a084110e992042ad0cdb', '18553657776', '24423@qq.com', 18, 'u', '2021-04-10 17:02:03', '2021-04-10 17:02:03');
COMMIT;

新建SpingBoot项目

新建空的SpringBoot项目(Model也行),版本2.3.3.RELEASE,Java1.8,pom.xml添加如下依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
		
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--MP插件-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

        <!--代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!-- 模板引擎 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <!--阿里巴巴数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

application.properties信息如下:

# 端口号
server.port=8082
# 设置context-path
server.servlet.context-path=/studyboot2023

# 数据库连接
spring.datasource.url = jdbc:mysql://localhost:3306/votedb?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123123123注意修改此处

# 配置日志(默认日志)
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置mapper  xml文件所在的路径
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# mybatis别名包扫描,映射类所在的包名,对应实体类的包名(注意此处)
mybatis-plus.type-aliases-package=com.example.study02.entity

项目结构
在这里插入图片描述

代码生成器GetCode类

与SpringBoot项目的启动类同级别位置,添加如下GetCode类。

注意修改代码中有关数据库连接的相关信息、生成代码所在位置完整包信息。其他的部分不用管。

package com.example.study02;

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.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.commons.lang3.StringUtils;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @Author wzp
 * @Date 2021-02-05 5:11 下午
 * @Description
 */
public class GetCode {
    static Scanner scanner = new Scanner(System.in);
    public static String scanner(String tip) {

        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");
        //String projectPath = "/Users/wangzp/IdeaProjects/SpringBootReview202305/study02";
        System.out.println("请输入当前项目/模块的绝对路径:");
        String projectPath = scanner.next();
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("wzp");
        gc.setOpen(false);// 是否打开文件夹
        gc.setFileOverride(true);//是否覆盖
        gc.setServiceName("%sService");
        gc.setIdType(IdType.ID_WORKER);
        //gc.setDateType(DateType.ONLY_DATE);
        // gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);
		//**************************修改如下位置****************************************
        // 设置数据源,注意修改此处
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/votedb?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        //包的配置
        PackageConfig pc = new PackageConfig();
        //pc.setModuleName("peng");// 会在那个包下生成,这个包自动创建
        //**************************修改如下位置****************************************
        pc.setParent("com.example.study02"); // 注意修改此行,即在哪个包下生成Controller、Service、entity等代码
        //  pc.setEntity("entity");
        //  pc.setMapper("mapper");
        //  pc.setService("service");
        //  pc.setController("controller");

        mpg.setPackageInfo(pc);


        /**
         * 以下这部分目前的功能就是将mapper.xml创建到resources中,而不是java包下
         */
        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/resources/mapper/"
                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        /*
        cfg.setFileCreate(new IFileCreate() {
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 判断自定义文件夹是否需要创建
                checkDir("调用默认方法创建的目录,自定义目录用");
                if (fileType == FileType.MAPPER) {
                    // 已经生成 mapper 文件判断存在,不想重新生成返回 false
                    return !new File(filePath).exists();
                }
                // 允许生成模板文件
                return true;
            }
        });
        */
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        /**
         * 上部分停止
         */
        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();

        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        //策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
        strategy.setEntityLombokModel(true);

        //strategy.setLogicDeleteFieldName("deleted");
        //自动填充配置
        TableFill gmt_create = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmt_modified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmt_modified);
        tableFills.add(gmt_create);
        strategy.setTableFillList(tableFills);

        //乐观锁
        //strategy.setVersionFieldName("version");

        strategy.setRestControllerStyle(true);
        strategy.setControllerMappingHyphenStyle(true);

        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

运行GetCode,生成每个表的增删改查所有代码。
在这里插入图片描述
生成效果如下:
在这里插入图片描述

在启动类中添加@MapperScan注解

@SpringBootApplication
@MapperScan("com.example.study02.mapper")
public class Study02Application {
    public static void main(String[] args) {
        SpringApplication.run(Study02Application.class, args);
    }
}

此时,每个表的增删改查已全部写完(service、mapper中为空是正常的),此时仅需完善Controller处理增删改查请求即可。(多表查询不可自动生成,需要配合Mybatis-Plus语法在Service、Mapper中添加处理代码)

测试

在UserController中添加如下测试代码,访问User表中的所有数据。

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    @GetMapping("/query")
    public List<User> query(){
        List<User> list = userService.list();
        return list;

    }
}

在浏览器中输入http://localhost:8082/studyboot2023/user/query

数据成功访问
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值