springBoot --- mybatisPlus自动生成代码

news2024/10/5 19:13:46

mybatisPlus自动生成代码

  • mybatisPlus自动生成代码
    • pom.xml
    • application.yml
    • 自动生成代码测试
    • 主启动类
    • 生成目录结果
  • 使用插件 --- 版本要求:3.4.0 版本以上
    • pom.xml更新mybatisplus插件版本
    • mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.generator.AutoGenerator‘
    • 项目目录
    • 分页插件 版本要求:3.4.0 版本以上

mybatisPlus自动生成代码

pom.xml

<?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.5.11</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hrf</groupId>
    <artifactId>blog</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>blog</name>
    <description>blog</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
        <!--        mybatis-plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!--        MP代码生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.0</version>
        </dependency>

        <!--freemarker模板引擎-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Shanghai
    username: root
    password: "0429"

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启SQL语句打印
#  global-config:
#    db-config:
#      id-type: auto  #  配置了全局采用自增主键策略

自动生成代码测试

package com.hrf.blog.generator;

import com.baomidou.mybatisplus.annotation.DbType;
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.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;

public class GeneratorTest {
    @Test
    public void generate() {


        AutoGenerator generator = new AutoGenerator();

        //1. 全局配置
        GlobalConfig config = new GlobalConfig();
        //  获取用户程序当前路径
        String projectPath = System.getProperty("user.dir");
        // 设置输出到的目录
        config.setOutputDir(projectPath + "/src/main/java");
        config.setAuthor("hrf");
        // 生成结束后是否打开文件夹
        config.setOpen(true);
        //  是否覆盖已有文件
        config.setFileOverride(true);
        // 全局配置添加到 generator 上
        generator.setGlobalConfig(config);

        //2. 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        //  数据库类型
//        dataSourceConfig.setDbType(DbType.MYSQL);
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Shanghai");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("0429");

        // 数据源配置添加到 generator代码生成器主类
        generator.setDataSource(dataSourceConfig);

        //3. 包配置, 生成的代码放在哪个包下
        PackageConfig packageConfig = new PackageConfig();

//        packageConfig.setModuleName("module");// 父包模块名
        packageConfig.setParent("com.hrf.blog");// 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
        packageConfig.setService("service");// Service包名
        packageConfig.setEntity("entity");// Entity包名
        packageConfig.setServiceImpl("service.impl");// ServiceImpl包名
        packageConfig.setMapper("mapper");// Mapper包名
        packageConfig.setController("controller");// Contoller包名
        packageConfig.setXml("mapper.xml");// Mapper.xml包名
        // 包配置添加到 generator
        generator.setPackageInfo(packageConfig);

        //4. 策略配置 数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表等信息,
        StrategyConfig strategyConfig = new StrategyConfig();
        // 下划线驼峰命名转换
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        // 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        // 自定义继承类全称,带包名 (以下为示例)
//        strategyConfig.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
//        strategyConfig.setSuperControllerClass("com.baomidou.ant.common.BaseController");
        strategyConfig.setEntityLombokModel(true);// 【实体】是否为lombok模型(默认 false)
        strategyConfig.setRestControllerStyle(true);// 生成 @RestController 控制器
        strategyConfig.setSuperEntityColumns("id");// 写于父类中的公共字段
//        strategyConfig.setInclude("fnd_user");// 需要包含的表名,允许正则表达式(与exclude二选一配置)
//        strategyConfig.setExclude("m_fnd_user1");// 需要排除的表名,允许正则表达式
        strategyConfig.setControllerMappingHyphenStyle(true);// 驼峰转连字符
        strategyConfig.setEntityTableFieldAnnotationEnable(true);// 是否生成实体时,生成字段注解 默认false;
        // 把策略配置添加到代码生成器主类
        generator.setStrategy(strategyConfig);

//   5. 向代码生成器主类上配置模板引擎,这是是freemarker,mpg.execute()方法就是执行生成代码类。
        generator.setTemplateEngine(new FreemarkerTemplateEngine());
        // 开始生成
        generator.execute();
    }
}

主启动类

package com.hrf.blog;


import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.hrf.blog.mapper")//扫描包
public class BlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(BlogApplication.class, args);
    }


}

生成目录结果

生成目录

参考地址MyBatis-Plus

使用插件 — 版本要求:3.4.0 版本以上

pom.xml更新mybatisplus插件版本

 <!--        mybatis-plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3</version>
        </dependency>
        <!--        MP代码生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3</version>
        </dependency>

mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.generator.AutoGenerator‘

产生原因:新版本中对象已经私有化。
解决方法:使用新的代码生成器

 @Test
    public void generate(){
        //  获取用户程序当前路径
        String projectPath = System.getProperty("user.dir");
        // 设置输出到的目录
        String out = projectPath + "/src/main/java";
//        设置mapper.xml生成路径
        String xmlOut = projectPath + "/src/main/java/com/hrf/blog/user/mapper/xml";

        FastAutoGenerator.create("jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Shanghai", "root", "0429")
                .globalConfig(builder -> {
                    builder.author("hrf") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(out); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.hrf.blog.user") // 设置父包名
//                            .moduleName("blogUser") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, xmlOut)); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder
//                            .addInclude("t_simple") // 设置需要生成的表名
                            .addTablePrefix("blog_", "c_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }

项目目录

在这里插入图片描述

分页插件 版本要求:3.4.0 版本以上

package com.hrf.blog.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.hrf.blog.mapper")
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

//    @Bean
//    public ConfigurationCustomizer configurationCustomizer() {
//        return configuration -> configuration.setUseDeprecatedExecutor(false);
//    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离散数学_九章:关系(2)

关系9.2 n元关系及其应用 1、n元关系&#xff0c;关系的域&#xff0c;关系的阶2、数据库和关系 1. 数据库 2. 主键 3. 复合主键 3、n元关系的运算 1. 选择运算 (Select) 2. 投影运算 (Project) 3. 连接运算 9.2 n元关系及其应用 n元关系&#xff1a;两个以上集合的元素间…

网络安全从业人员应该如何提升自身的web渗透能力?

前言 web 渗透这个东西学起来如果没有头绪和路线的话&#xff0c;是非常烧脑的。 理清 web 渗透学习思路&#xff0c;把自己的学习方案和需要学习的点全部整理&#xff0c;你会发现突然渗透思路就有点眉目了。 程序员之间流行一个词&#xff0c;叫 35 岁危机&#xff0c;&am…

Amazon SageMaker测评分享,效果超出预期

一、前言随着科技的进步和社会的发展&#xff0c;人工智能得到了愈加广泛的重视&#xff0c;特别是最近大火的Chatgpt&#xff0c;充分展现了研发通用人工智能助手广阔的研究和应用前景。让越来越多的组织和企业跟风加入到人工智能领域的研究中&#xff0c;但机器学习的实施是一…

项目---基于TCP的高并发聊天系统

目录 服务端 服务端视角下的流程图 一、数据库管理模块 1.1 数据库表的创建 1.2 .对于数据库的操作 1.2.1首先得连接数据库 1.2.2执行数据库语句 1.2.3 返回数据库中存放的所有用户的信息 1.2.4返回数据库中存放的所有用户的好友信息 二、用户管理模块 2.1、UserInfo类&…

深度学习和人工智能之间是什么样的关系?

深度学习与人工智能概念的潜在联系&#xff0c;我们依然借助维恩图来说明&#xff0c;如图4.1所示。 1、人工智能 “人工智能”这个概念新鲜时髦但又含混模糊&#xff0c;同时包罗万象。尽管如此,我们仍尝试对 人工智能进行定义:用一台机器处理来自其周围环境的信息,然后将这些…

学习系统编程No.10【文件描述符】

引言&#xff1a; 北京时间&#xff1a;2023/3/25&#xff0c;昨天摆烂一天&#xff0c;今天再次坐牢7小时&#xff0c;难受尽在不言中&#xff0c;并且对于笔试题&#xff0c;还是非常的困难&#xff0c;可能是我做题不够多&#xff0c;也可能是没有好好的总结之前做过的一些…

15.transformer全解

欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 文章目录1.基础介绍2.网络结构2.1 Input/Output Embedding2.2 自注意力机制 self-attention2.3 point-wise全连接层2.4 位置编码 Position Encoding3.输入处理过程示例4.代码实现1.基础介绍…

论文阅读和分析:Hybrid Mathematical Symbol Recognition using Support Vector Machines

HMER论文系列 1、论文阅读和分析&#xff1a;When Counting Meets HMER Counting-Aware Network for HMER_KPer_Yang的博客-CSDN博客 2、论文阅读和分析&#xff1a;Syntax-Aware Network for Handwritten Mathematical Expression Recognition_KPer_Yang的博客-CSDN博客 3、论…

自然语言处理(七): Deep Learning for NLP: Recurrent Networks

目录 1. N-gram Language Models 2. Recurrent Neural Networks 2.1 RNN Unrolled 2.2 RNN Training 2.3 (Simple) RNN for Language Model 2.4 RNN Language Model: Training 2.5 RNN Language Model: Generation 3. Long Short-term Memory Networks 3.1 Language M…

论文阅读【14】HDLTex: Hierarchical Deep Learning for Text Classification

论文十问十答&#xff1a; Q1论文试图解决什么问题&#xff1f; 多标签文本分类问题 Q2这是否是一个新的问题&#xff1f; 不是 Q3这篇文章要验证一个什么科学假设&#xff1f; 因为文本标签越多&#xff0c;分类就越难&#xff0c;所以就将文本类型进行分层分类&#xff0c;这…

【人工智能与深度学习】判别性循环稀疏自编码器和群体稀疏性

【人工智能与深度学习】判别性循环稀疏自编码器和群体稀疏性 判别类循环稀疏自编码器 (DrSAE)组稀疏组稀疏自编码器的问与答图像级别训练,无权重分享(weight sharing)的局域过滤器 (local filters)判别类循环稀疏自编码器 (DrSAE) DrSAE的设计结合了稀疏编码(稀疏自编码器)…

数据库并发控制基本概念和基本技术

并发控制与基本技术一、并发控制1. 概述2. 并发访问可能出现的问题二、并发控制的主要技术1、基本技术2、封锁及锁的类型2.1、什么是封锁2.2、基本封锁类型2.2.1、排它锁&#xff08;Exclusive Locks&#xff0c;简记为 X 锁&#xff09;2.2.2、共享锁&#xff08;Share Locks&…

基于ArkUI框架开发-ImageKnife渲染层重构

ImageKnife是一款图像加载缓存库&#xff0c;主要功能特性如下&#xff1a; ●支持内存缓存&#xff0c;使用LRUCache算法&#xff0c;对图片数据进行内存缓存。 ●支持磁盘缓存&#xff0c;对于下载图片会保存一份至磁盘当中。 ●支持进行图片变换&#xff1a;支持图像像素源图…

【SSconv:全色锐化:显式频谱-空间卷积】

SSconv: Explicit Spectral-to-Spatial Convolution for Pansharpening &#xff08;SSconv&#xff1a;用于全色锐化的显式频谱-空间卷积&#xff09; 全色锐化的目的是融合高空间分辨率的全色&#xff08;PAN&#xff09;图像和低分辨率的多光谱&#xff08;LR-MS&#xff…

【微服务】6、一篇文章学会使用 SpringCloud 的网关

目录一、网关作用二、网关的技术实现三、简单使用四、predicates(1) 网关路由可配置的内容(2) 路由断言工厂&#xff08;Route Predicate Factory&#xff09;五、filters(1) GatewayFilter(2) 给全部进入 userservice 的请求添加请求头(3) 全局过滤器 —— GlobalFilter(4) 过…

PX4从放弃到精通(二十七):固定翼姿态控制

文章目录前言一、roll/pitch姿态/角速率控制二、偏航角速率控制三、主程序前言 固件版本 PX4 1.13.2 欢迎交流学习&#xff0c;可加左侧名片 一、roll/pitch姿态/角速率控制 roll/pitch的姿态控制类似&#xff0c;这里只介绍roll姿态控制&#xff0c; 代码位置&#xff1a; …

如何确定NetApp FAS存储系统是否正常识别到了boot device?

近期处理了几个NetApp FAS存储控制器宕机的案例&#xff0c;其中部分有代表性的就是其实控制器并没有物理故障&#xff0c;问题是控制器里面的boot device的SSD盘出现了问题。这里给大家share一下如何确定系统是否成功识别到了boot device设备。 对于很多非专业人士来说&#…

mongodb使用docker搭建replicaSet集群与变更监听

在mongodb如果需要启用变更监听功能(watch)&#xff0c;mongodb需要在replicaSet或者cluster方式下运行。 replicaSet和cluster从部署难度相比&#xff0c;replicaSet要简单许多。如果所存储的数据量规模不算太大的情况下&#xff0c;那么使用replicaSet方式部署mongodb是一个…

凹凸/法线/移位贴图的区别

你是否在掌握 3D 资产纹理的道路上遇到过障碍&#xff1f; 不要难过&#xff01; 许多刚接触纹理或 3D 的艺术家在第一次遇到凹凸贴图&#xff08;Bump Map&#xff09;、法线贴图&#xff08;Normal Map&#xff09;和移位贴图&#xff08;Displacement Map&#xff09;时通常…

Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细

Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细一 Redis的主从复制二 主从复制的作用三 主从复制的流程四 主从复制实验4.1 环境部署4.2 安装Redis&#xff08;主从服务器&#xff09;4.3 修改Master节点Redis配置文件 (192.168.163.100)4.4 修改Slave节点Redis配置文…