文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何利用Mybatis-Plus自动生成代码(超详细注解)

2023-08-31 20:17

关注

如何利用Mybatis-Plus自动生成代码(超详细注解)

1、简介

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
在这里插入图片描述

特性

支持数据库

任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。

MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss
,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb,informix,TDengine,redshift

达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库,优炫数据库

2、代码生成器

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

public class CodeGenerator {        public static void main(String[] args) {        //获取控制台的数据        Scanner scanner = new Scanner(System.in);        // 代码生成器        AutoGenerator mpg = new AutoGenerator();        //~~~~~~~~~~~~~~~~~~~~~全局配置~~~~~~~~~~开始~~~~~~~~~        GlobalConfig gc = new GlobalConfig();        //System.out.println("请输入文件输出目录的模块或者项目的地址:");        //String projectPath = scanner.nextLine();        String projectPath = System.getProperty("user.dir");    //工程根目录        System.out.println(projectPath);        gc.setOutputDir(projectPath + "/src/main/java");        //生成文件的输出目录        gc.setAuthor("tigerhhzz");  //作者        gc.setFileOverride(true);                //是否覆蓋已有文件 默认值:false        gc.setOpen(false);          //是否打开输出目录 默认值:true        gc.setBaseColumnList(true);                //开启 baseColumnList 默认false        gc.setBaseResultMap(true);                //开启 BaseResultMap 默认false        //gc.setEntityName("%sEntity");                //实体命名方式  默认值:null 例如:%sEntity 生成 UserEntity        gc.setMapperName("%sMapper");                //mapper 命名方式 默认值:null 例如:%sDao 生成 UserDao        gc.setXmlName("%sMapper");                //Mapper xml 命名方式   默认值:null 例如:%sDao 生成 UserDao.xml        gc.setServiceName("%sService");                //service 命名方式   默认值:null 例如:%sBusiness 生成 UserBusiness        gc.setServiceImplName("%sServiceImpl");                //service impl 命名方式  默认值:null 例如:%sBusinessImpl 生成 UserBusinessImpl        gc.setControllerName("%sController");                //controller 命名方式    默认值:null 例如:%sAction 生成 UserAction        mpg.setGlobalConfig(gc);        //~~~~~~~~~~~~~~~~~~~~~全局配置~~~~~~~~~~结束~~~~~~~~~        //~~~~~~~~~~~~~~~~~~~~~数据源配置~~~~~~~~~~开始~~~~~~~~~        DataSourceConfig dsc = new DataSourceConfig();        dsc.setUrl("jdbc:mysql://localhost:3306/tigervueblog?useUnicode=true&useSSL=false&characterEncoding=utf8");        // dsc.setSchemaName("public");        dsc.setDriverName("com.mysql.cj.jdbc.Driver");        dsc.setUsername("root");        dsc.setPassword("123456");        mpg.setDataSource(dsc);        //~~~~~~~~~~~~~~~~~~~~~数据源配置~~~~~~~~~~结束~~~~~~~~~        //~~~~~~~~~~~~~~~~~~~~~包配置~~~~~~~~~~开始~~~~~~~~~        PackageConfig pc = new PackageConfig();        // pc.setModuleName(scanner("模块名"));        // pc.setParent("com.stu");        System.out.println("请输入模块名:");        String name = scanner.nextLine();        //自定义包配置        pc.setParent(name);        pc.setModuleName(null);        pc.setMapper("mapper");        pc.setEntity("domain");        pc.setService("service");        pc.setServiceImpl("service.impl");        pc.setController("controller");        mpg.setPackageInfo(pc);        //~~~~~~~~~~~~~~~~~~~~~包配置~~~~~~~~~~结束~~~~~~~~~        //~~~~~~~~~~~~~~~~~~~~~自定义配置~~~~~~~~~~开始~~~~~~~~~        InjectionConfig cfg = new InjectionConfig() {            @Override            public void initMap() {                // to do nothing            }        };        List<FileOutConfig> focList = new ArrayList<>();        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {            @Override            public String outputFile(TableInfo tableInfo) {        // 自定义输入文件名称                return projectPath + "/src/main/resources/mapper/" +                         tableInfo.getEntityName() + "Mapper" +                        StringPool.DOT_XML;            }        });        cfg.setFileOutConfigList(focList);        mpg.setCfg(cfg);        //~~~~~~~~~~~~~~~~~~~~~自定义配置~~~~~~~~~~结束~~~~~~~~~        //这里不自动生成xml,改为自定义生成        mpg.setTemplate(new TemplateConfig().setXml(null));        //~~~~~~~~~~~~~~~~~~~~~策略配置~~~~~~~~~~开始~~~~~~~~~        // 策略配置数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表        StrategyConfig strategy = new StrategyConfig();        strategy.setNaming(NamingStrategy.underline_to_camel);    //表名生成策略        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略, 未指定按照 naming 执行        //    strategy.setCapitalMode(true);            // 全局大写命名 ORACLE 注意        //    strategy.setTablePrefix("prefix");            //表前缀        //    strategy.setSuperEntityClass("com.stu.domain");    //自定义继承的Entity类全称,带包名        //    strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); //自定义实体,公共字段        strategy.setEntityLombokModel(true);                    //【实体】是否为lombok模型(默认 false        strategy.setRestControllerStyle(true);                    //生成 @RestController 控制器        //    strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");//自定义继承的Controller类全称,带包名        //      strategy.setInclude(scanner("表名"));        //需要包含的表名,允许正则表达式(与exclude二选一配置)        System.out.println("请输入映射的表名(多个表名英文逗号分割):");        String tables = scanner.nextLine();        String[] num = tables.split(",");        strategy.setInclude(num);       // 需要生成的表可以多张表        //    strategy.setExclude(new String[]{"test"});          // 排除生成的表        //如果数据库有前缀,生成文件时是否要前缀acl_        //      strategy.setTablePrefix("bus_");        //      strategy.setTablePrefix("sys_");        strategy.setControllerMappingHyphenStyle(true);    //驼峰转连字符        strategy.setTablePrefix(pc.getModuleName() + "_");//是否生成实体时,生成字段注解        mpg.setStrategy(strategy);        //~~~~~~~~~~~~~~~~~~~~~策略配置~~~~~~~~~~结束~~~~~~~~~        //模板引擎配置,使用Freemarker,默认 Velocity 可选模板引擎 Beetl\        mpg.setTemplateEngine(new FreemarkerTemplateEngine());        mpg.execute();    }}

3、详细使用教程

3.1 两个mysql数据库:

m_user脚本:

CREATE TABLE `m_user` (  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自动递增id',  `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名',  `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户头像',  `email` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱地址',  `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',  `status` int NOT NULL DEFAULT '0' COMMENT '0代表正常,-1代表被锁定',  `created` datetime DEFAULT NULL COMMENT '注册时间',  `last_login` datetime DEFAULT NULL COMMENT '最后登录时间',  PRIMARY KEY (`id`),  KEY `UK_USERNAME` (`username`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

m_blog脚本:

CREATE TABLE `m_blog` (  `id` bigint NOT NULL AUTO_INCREMENT,  `user_id` bigint NOT NULL,  `title` varchar(255) NOT NULL,  `description` varchar(255) NOT NULL,  `content` longtext,  `created` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,  `status` tinyint DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

3.2 创建springboot项目

在这里插入图片描述

3.3 添加依赖

MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:

项目完整pom文件:(注意版本号)

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.6.6</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.tigerhhzz</groupId>    <artifactId>springboot-mybatisplus-demo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>springboot-mybatisplus-demo</name>    <description>Demo project for Spring Boot MP</description>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>        </dependency>        <!-- 包含spirng Mvc ,tomcat的包包含requestMapping restController 等注解 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-aop</artifactId>        </dependency>        <!--mysql数据库 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>8.0.28</version>        </dependency>        <!-- druid 连接池 --><!--        <dependency>--><!--            <groupId>com.alibaba</groupId>--><!--            <artifactId>druid</artifactId>--><!--            <version>1.2.8</version>--><!--        </dependency>-->        <!-- mybatis版本必须与druid版本兼容,否则无法创建DataSource -->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-boot-starter</artifactId>            <version>3.2.0</version>        </dependency>        <!-- 引入freemarker模板引擎供mp生成代码-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-freemarker</artifactId>        </dependency>        <!--mp代码生成器-->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-generator</artifactId>            <version>3.3.0</version>        </dependency>        <!-- hutool工具类-->        <dependency>            <groupId>cn.hutool</groupId>            <artifactId>hutool-all</artifactId>            <version>5.3.3</version>        </dependency>        <!-- lombok注解-->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <!-- 日志打印-->        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.12</version>        </dependency>        <!-- 单元测试-->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <configuration>                    <excludes>                        <exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>                        </exclude>                    </excludes>                </configuration>            </plugin>        </plugins>    </build></project>

3.5 编辑application.yml文件

server:  port: 8082  servlet:    context-path: /spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    #  test-mybatis    url: jdbc:mysql://127.0.0.1:3306/tigervueblog?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true    username: root    password: 123456  jackson:    date-format: yyyy-MM-dd HH:mm:ss    time-zone: GMT+8    serialization:      write-dates-as-timestamps: falsemybatis-plus:  configuration:    map-underscore-to-camel-case: true    auto-mapping-behavior: full    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  mapper-locations: classpath*:mapper*Mapper.xml  global-config:    # �߼�ɾ������    db-config:      # ɾ��ǰ      logic-not-delete-value: 1      # ɾ����      logic-delete-value: 0

3.6 主启动类

package com.mpautocode;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@Slf4j@SpringBootApplicationpublic class springbootmptest {    public static void main(String[] args) {        SpringApplication.run(springbootmptest.class, args);        log.info("springbootmptest启动成功~~~~^…^~~~~^…^~~~~~^…^~~~~");    }}

4、运行

4.1 项目最终结构

在这里插入图片描述

4.2 运行代码生成器类

在这里插入图片描述
输入模块名:
在这里插入图片描述

请输入映射的表名(多个表名英文逗号分割):
在这里插入图片描述
生成完成
在这里插入图片描述

4.3 测试运行controller

在运行主启动类之前,检查在生成好的mapper接口中加入@Mapper注解。

编写一个usercontroller

package com.mpautocode.controller;import com.mpautocode.domain.MUser;import com.mpautocode.service.MUserService;import com.tigerhhzz.springbootmybatisplusdemo.entities.CommonResult;import com.tigerhhzz.springbootmybatisplusdemo.entities.User;import com.tigerhhzz.springbootmybatisplusdemo.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@RequestMapping("/m-user")public class MUserController {    @Autowired    MUserService userService;        @GetMapping("/list")    public CommonResult list(){        // 查询所有        List<MUser> list = userService.list();        return new CommonResult(200,"查询数据成功",list);    }}

运行结果:
在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_43025151/article/details/130411026

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯