mybatisPlus快速入门(附代码生成器)

数据库操作

创建数据库

CREATE TABLE `mybatis_plus`.`student`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `version` int(10) NULL DEFAULT 1 COMMENT '乐观锁',
  `deleted` int(1) NULL DEFAULT 0 COMMENT '逻辑删除',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE = MyISAM AUTO_INCREMENT = 526544901 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;

插入值

INSERT INTO test (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');

结构如下

image.png

项目准备

新建一个springboot工程

image.png
image.png

导入依赖

<dependencies>
  <!--spring-boot-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <!--spring-boot-test-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
  <!--swagger-->
  <dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>1.6.2</version>
  </dependency>
  <!--lombok-->
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
  </dependency>
  <!--mysql 驱动-->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.31</version>
  </dependency>
  <!--mybatis-plus-->
  <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
  </dependency>
  <!--mybatis-plus-generator 生成器-->
  <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.2</version>
  </dependency>
  <!--velocity-->
  <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
  </dependency>
  <!--freemarker-->
  <dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
  </dependency>
  <!--beetl 模板-->
  <dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.8.1.RELEASE</version>
  </dependency>
</dependencies>

注:模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker,实际使用中只导入使用模板对应的依赖即可,不用全部导入。

连接数据库

image.png

选中对应的数据库

image.png

代码生成器

创建一个test类并编写框架

public static void main(String[] args) {
    
    
    //1、配置数据源
    FastAutoGenerator.create("url", "username", "password")
        //2、全局配置
        .globalConfig(...)
        //3、包配置
        .packageConfig(...)
        //4、策略配置
        .strategyConfig(...)
        //5、模板引擎配置
        .templateEngine(...)
        //6、执行
        .execute();
}
  • 配置数据源
//1、配置数据源
FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus", "root", "5155809")
  • 全局配置
//2、全局配置
.globalConfig(builder -> {
    
    
    builder.author("Ann") // 设置作者名
        .outputDir(System.getProperty("user.dir") + "/src/main/java")   //设置输出路径:项目的 java 目录下
        .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
        .dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
        .fileOverride()   //覆盖之前的文件
        .enableSwagger()   //开启 swagger 模式
        .disableOpenDir();   //禁止打开输出目录,默认打开
})
  • 包配置
//3、包配置
.packageConfig(builder -> {
    
    
    builder.parent("test") // 设置父包名
        .moduleName("xiaoan")   //设置模块包名
        .entity("pojo")   //pojo 实体类包名
        .service("service") //Service 包名
        .serviceImpl("serviceImpl") // ***ServiceImpl 包名
        .mapper("mapper")   //Mapper 包名
        .xml("mapper")  //Mapper XML 包名
        .controller("controller") //Controller 包名
        .other("utils") //自定义文件包名
        //.pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径
        .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper"));    //配置 mapper.xml 路径信息:项目的 resources 目录下
})
  • 策略配置
//4、策略配置
.strategyConfig(builder -> {
    
    
    builder.addInclude("test") // 设置需要生成的数据表名
        .addTablePrefix("t_", "c_") // 设置过滤表前缀

        //4.1、Mapper策略配置
        .mapperBuilder()
        .superClass(BaseMapper.class)   //设置父类
        .formatMapperFileName("%sMapper")   //格式化 mapper 文件名称
        .enableMapperAnnotation()       //开启 @Mapper 注解
        .formatXmlFileName("%sXml")//格式化 Xml 文件名称

        //4.2、service 策略配置
        .serviceBuilder()
        .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
        .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl

        //4.3、实体类策略配置
        .entityBuilder()
        .enableLombok() //开启 Lombok
        .disableSerialVersionUID()  //不实现 Serializable 接口,不生产 SerialVersionUID
        .logicDeleteColumnName("deleted")   //逻辑删除字段名
        .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命
        .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命
        .addTableFills(
            new Column("create_time", FieldFill.INSERT),
            new Column("modify_time", FieldFill.INSERT_UPDATE)
        )   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间
        .enableTableFieldAnnotation()       // 开启生成实体时生成字段注解

        //4.4、Controller策略配置
        .controllerBuilder()
        .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
        .enableRestStyle();  //开启生成 @RestController 控制器
})
  • 模板
//5、模板
.templateEngine(new VelocityTemplateEngine())
    /*
.templateEngine(new FreemarkerTemplateEngine())
.templateEngine(new BeetlTemplateEngine())
*/
  • 执行
//6、执行
.execute();

生成效果对比

image.pngimage.png

附 快速生成代码

public static void main(String[] args) {
    
    
    //1、配置数据源
    FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus", "root", "5155809")
        //2、全局配置
        .globalConfig(builder -> {
    
    
            builder.author("Ann") // 设置作者名
                .outputDir(System.getProperty("user.dir") + "/src/main/java")   //设置输出路径:项目的 java 目录下
                .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
                .dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
                .fileOverride()   //覆盖之前的文件
                .enableSwagger()   //开启 swagger 模式
                .disableOpenDir();   //禁止打开输出目录,默认打开
        })
        //3、包配置
        .packageConfig(builder -> {
    
    
            builder.parent("com") // 设置父包名
                .moduleName("xiaoan")   //设置模块包名
                .entity("pojo")   //pojo 实体类包名
                .service("service") //Service 包名
                .serviceImpl("serviceImpl") // ***ServiceImpl 包名
                .mapper("mapper")   //Mapper 包名
                .xml("mapper")  //Mapper XML 包名
                .controller("controller") //Controller 包名
                .other("utils") //自定义文件包名
                .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper"));    //配置 mapper.xml 路径信息:项目的 resources 目录下
        })
        //4、策略配置
        .strategyConfig(builder -> {
    
    
            builder.addInclude("test") // 设置需要生成的数据表名
                .addTablePrefix("t_", "c_") // 设置过滤表前缀

                //4.1、Mapper策略配置
                .mapperBuilder()
                .superClass(BaseMapper.class)   //设置父类
                .formatMapperFileName("%sMapper")   //格式化 mapper 文件名称
                .enableMapperAnnotation()       //开启 @Mapper 注解
                .formatXmlFileName("%sXml")//格式化 Xml 文件名称

                //4.2、service 策略配置
                .serviceBuilder()
                .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
                .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl

                //4.3、实体类策略配置
                .entityBuilder()
                .enableLombok() //开启 Lombok
                .disableSerialVersionUID()  //不实现 Serializable 接口,不生产 SerialVersionUID
                .logicDeleteColumnName("deleted")   //逻辑删除字段名
                .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命
                .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命
                .addTableFills(
                    new Column("create_time", FieldFill.INSERT),
                    new Column("modify_time", FieldFill.INSERT_UPDATE)
                )   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间
                .enableTableFieldAnnotation()       // 开启生成实体时生成字段注解

                //4.4、Controller策略配置
                .controllerBuilder()
                .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
                .enableRestStyle();  //开启生成 @RestController 控制器
                })
                //5、模板
                .templateEngine(new VelocityTemplateEngine())
                /*
                .templateEngine(new FreemarkerTemplateEngine())
                .templateEngine(new BeetlTemplateEngine())
                */

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

测试案列

  • 配置application.yaml
# 数据库连接配置
spring:
datasource:
username: root
password: 5155809
url: jdbc:mysql://localhost:3306/mybatis_plus?userSSL=false&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver

#  配置日志(使用默认控制台输出)
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

# 配置逻辑删除
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0

我使用的Mysql5,若使用Mysql8:则需要在url后再拼接 &serverTimezone=GMT%22B8

  • 编写测试类
@Autowired
    private TestMapper testMapper;

@Test
    void contextLoads() {
    
    
    //参数是一个 Wrapper,条件构造器,这里我们先不用 null
    //查询全部用户
    List<com.xiaoan.pojo.Test> list = testMapper.selectList(null);
    //遍历输出
    list.forEach(System.out::println);
}
  • 查看测试结果

image.png

测试成功!!!

代码地址(GitHub):mybatisPlus-study

猜你喜欢

转载自blog.csdn.net/AnnQAQ/article/details/129651470