2023最新版——新手使用mybatis-plus 3.5.2并使用器代码生成器

发布时间 2023-05-08 17:41:55作者: 奚罗罗

最新版——新手使用mybatis-plus 3.5.2并使用器代码生成器

第一步,pom文件引入依赖

主要引入mybatis-plus和代码生成器需要使用的freemaker依赖

<dependency>
 	<groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>
 <dependency>
    <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-generator</artifactId>
      <version>3.5.2</version>
 </dependency>
  <dependency>
      <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter-test</artifactId>
      <version>3.5.3.1</version>
  </dependency>

  <!--freemarker模板-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.32</version>
        </dependency>
        <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>1.5.13</version>
       </dependency>

注意:

  • springboot和mybatis-plus需要对应版本,建议去mybatis-plus官网查看。

  • 本文使用的springboot和mybatis-plus都是最新版本:springboot 2.7.8,mybatis-plus3.5.2

  • 如果不知道该使用啥版本,建议都选最新版本

  • mybatis-plus官网有详细指南,建议观看

第二步,配置

在application.properties或yml文件中配置:

# DataSourceProperties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#这里把qa换成自己数据库名字
spring.datasource.url=jdbc:mysql://localhost:3306/qa?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false
#数据源配置
#username和password写自己数据库的
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=30000
#mybatis-plus配置
#放mapper文件的具体位置
mybatis-plus.mapper-locations= classpath*:com/luo/forum/mapper/xml/*Mapper.xml
#给entity包取别名,这样在使用com.luo.forum.User等实体时可以直接写User
mybatis-plus.type-aliases-package=com.luo.forum.entity
#日志:开启这个日志后,回台控制台输出sql语句及查询结果
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

第三步,代码生成器

创建一个类:mygenerator

package com.luo.forum;

        import com.baomidou.mybatisplus.annotation.FieldFill;
        import com.baomidou.mybatisplus.annotation.IdType;
        import com.baomidou.mybatisplus.generator.FastAutoGenerator;
        import com.baomidou.mybatisplus.generator.config.*;
        import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
        import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
        import com.baomidou.mybatisplus.generator.fill.Column;

        import java.util.Collections;

public class MyGenerator {
    private static final String projectPath = System.getProperty("user.dir");
    private static final String url = "jdbc:mysql://127.0.0.1:3306/qa";//这里改为自己数据库名字
    private static final String username = "root";//数据库用户名和密码
    private static final String password = "123456";
    private static final String parentPackageName = "com.luo.forum";//生成的mapper等文件夹放在哪个包下
    private static final String writer = "lyy";//自己的名字
    private static final String outPath = projectPath + "\\src\\main\\java\\";
    private static final String mapperPath = projectPath + "\\src\\main\\java\\com\\luo\\forum\\mapper\\xml\\";//mapper.xml文件放的位置

    public static void main(String[] args) {
        String[] tableNames = {"user"};//数据库表名
        MyGenerator.execute(tableNames);
    }

    public static void execute(String[] tableNames) {
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author(writer) 
                            .enableSwagger() 
                            .outputDir(outPath) 
                            .disableOpenDir();
                })
                .packageConfig(builder -> {
                    builder.parent(parentPackageName) 
                            .pathInfo(Collections.singletonMap(OutputFile.xml, mapperPath));
                })

                .strategyConfig(builder -> {
                    builder.addInclude(tableNames) 
                            .addTablePrefix("t_") 
                            //Service 层生成设置
                            .serviceBuilder()
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImpl")
                            //Entity
                            .entityBuilder()
                            .entityBuilder().fileOverride()//表示再次生成会覆盖,建议entity和mapper层覆盖
                            .enableChainModel()
                            .enableLombok()
                            .enableTableFieldAnnotation()
                            .logicDeleteColumnName("deleted")
                            .logicDeletePropertyName("deleted")
                            .versionColumnName("version")
                            .versionPropertyName("version")
                            .addTableFills(new Column("create_Time", FieldFill.INSERT))
                            .addTableFills(new Column("update_Time", FieldFill.INSERT_UPDATE))
                            //controller 
                            .controllerBuilder()
                            .enableRestStyle()//生成的controller自带@RestController注解
                            //mapper
                            .mapperBuilder()
                            .mapperBuilder().fileOverride();
                })
                .templateEngine(new FreemarkerTemplateEngine()) //使用freemaker模板引擎
                .execute();
    }
}

注意:

  • 每次运行会为表生成mapper、service、entity和controller层代码,其中mapper层和entity层会覆盖之前生成的,改了表结构重新运行即可
  • 如果需要自己写sql语句,在mapper和mapper.xml中编写,mapper层上要自己加上@Mapper注解,可能会扫描不到
  • 自己的业务方法写在serviceImpl中