目录

增加依赖

代码生成器配置类

使用查询构造器

controller


一般在业务逻辑代码编写前的最重要步骤是进行关系模型的构建,也就是数据库表的设计,完成表设计后建立与Entity的对应关系、视图层VO设计、Mapper接口、Service服务、IMPI实现,如果使用MybatisPlus,可以使用代码生成器按照数据库配置扫描数据库完成上面所有工作,唯一要做的是在IMPL中定制化业务代码;

增加依赖

        <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.2</version></dependency>

代码生成器配置类

这里继续使用H2数据库,在idea中就有,指定数据库登录方式,指定文件生成路径,这里只识别STUDENT表:

package com.example.springbootmybatisplus;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class CodeGenerator {public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);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();// 全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/springboot-mybatisplus/src/main/java");gc.setAuthor("yzg");gc.setOpen(false);gc.setSwagger2(true);mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:h2:~/yzg");dsc.setSchemaName("PUBLIC");dsc.setDbType(DbType.H2);dsc.setDriverName("org.h2.Driver");dsc.setUsername("root");dsc.setPassword("123456");mpg.setDataSource(dsc);// 包配置PackageConfig pc = new PackageConfig();//pc.setModuleName(scanner("模块名"));pc.setParent("com.example.springbootmybatisplus");mpg.setPackageInfo(pc);// 自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};// 如果模板引擎是 freemarkerString templatePath = "/templates/mapper.xml.ftl";// 如果模板引擎是 velocity//String templatePath = "/templates/mapper.xml.vm";// 自定义输出配置List<FileOutConfig> focList = new ArrayList<>();// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!return projectPath + "/springboot-mybatisplus/src/main/resources/mapper/" + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});/*cfg.setFileCreate(new IFileCreate() {@Overridepublic boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {// 判断自定义文件夹是否需要创建checkDir("调用默认方法创建的目录,自定义目录用");if (fileType == FileType.MAPPER) {// 已经生成 mapper 文件判断存在,不想重新生成返回 falsereturn !new File(filePath).exists();}// 允许生成模板文件return true;}});*/cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);// 配置模板TemplateConfig templateConfig = new TemplateConfig();// 配置自定义输出模板//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别// templateConfig.setEntity("templates/entity2.java");// templateConfig.setService();// templateConfig.setController();templateConfig.setXml(null);mpg.setTemplate(templateConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);//strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);// 公共父类//strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");// 写于父类中的公共字段//strategy.setSuperEntityColumns("id");//strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName() + "_");strategy.setInclude("MAGIC_API_FILE");strategy.setInclude("STUDENT");mpg.setStrategy(strategy);mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();}}

扫描策略中指定表名:

使用查询构造器

QueryWrapper是mybatisplus中最常用的对象,生成查询构造器,可以内置做一些比较运算,替代sql。

package com.example.springbootmybatisplus.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.springbootmybatisplus.entity.Student;
import com.example.springbootmybatisplus.mapper.StudentMapper;
import com.example.springbootmybatisplus.service.IStudentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.springbootmybatisplus.utils.ApiError;
import com.example.springbootmybatisplus.utils.ApiErrorEnum;
import com.example.springbootmybatisplus.utils.Either;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;/*** <p>* 服务实现类* </p>** @author yzg* @since 2022-07-02*/
@Service
@Slf4j
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {@Autowiredprivate StudentMapper studentMapper;@Overridepublic CompletableFuture<Either<ApiError, List<Student>>> getAll()  {log.info("xxxxxxxxxxxx--begin--xxxxxxx");LambdaQueryWrapper<Student> queryWrapper = new QueryWrapper<Student>().lambda().eq(Student::getName,"yzg");Optional<List<Student>> optionalStudents = Optional.ofNullable(studentMapper.selectList(queryWrapper));// 非空判断,只要sql对mybatis不会给null,mybatis内部错误会传nullif (optionalStudents.isPresent()) {log.info("is not null.");List<Student> listStudents =  optionalStudents.get().stream().filter(student -> student.getGender().equalsIgnoreCase("boy")).collect(Collectors.toList());return CompletableFuture.completedFuture(Either.Right(listStudents));} else {return CompletableFuture.completedFuture(Either.Left(ApiError.from(ApiErrorEnum.CHECK_DATABASE_WRONG)));}}
}

controller

@RestController
@RequestMapping("/student")
@Api("这是测试方法")
public class StudentController {@AutowiredStudentServiceImpl studentService;@GetMapping("/get")@Testpublic CompletableFuture<ResponseData> getAll() {return studentService.getAll().thenCompose(resp ->resp.left.map(apiError -> CompletableFuture.completedFuture(ResponseData.fail(apiError))).orElseGet(() -> CompletableFuture.completedFuture(ResponseData.success(resp.right))));}
}

SpringBoot实践(二十三):MybatisPlus代码生成器使用相关推荐

  1. SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)

    系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...

  2. SpringBoot实践(三十二):5分钟搭建springboot单体应用开发框架

    熟悉语言和开发工具上基础快速使用框架构建应用是个机械工作,5分钟完成开发准备工作,没有冗余动作. 目录 准备工作 开发框架搭建 spring初始化 常规依赖 其他依赖 规范化开发 目录结构 依赖适配 ...

  3. SpringBoot集成MyBatis-Plus代码生成器(Dao)

    1.说明 本文基于SpringBoot集成MyBatis-Plus代码生成器, 把原来生成Entity.Mapper.Mapper XML.Service.Controller等各个模块的代码, 修改 ...

  4. SpringBoot集成MyBatis-Plus代码生成器

    1.说明 本文详细介绍Spring Boot集成MyBatis-Plus代码生成器的方法. 基于一个创建好的Spring Boot工程, 执行MyBatis-Plus提供的AutoGenerator代 ...

  5. 苞米豆MyBatis-plus代码生成器

    MyBatis-plus 代码生成器 一.首先导入MyBatis-plus的依赖 二 .生成代码编写 一.首先导入MyBatis-plus的依赖 <!--苞米豆MyBatis依赖 -->& ...

  6. (二十三)admin-boot项目之captcha验证码整合

    (二十三)captcha验证码整合 项目地址:https://gitee.com/springzb/admin-boot 如果觉得不错,给个 star 简介: 这是一个基础的企业级基础后端脚手架项目, ...

  7. Mybatisplus代码生成器(界面插件)

    Mybatisplus 代码生成器提供 Windows Desktop 和 IDEA Plugin 两个版本. 主要功能 Mybatis Plus代码生成器 自定义配置模板 自定义表-实体映射信息 多 ...

  8. mybatis-plus代码生成器生成

    一,mybatis-plus代码生成器 在项目开发中,在新建一个项目时,要写大量的controller和service等等,不免觉得繁琐,因此可以使用mybatis-plus的一套逆向生成工具,解决大 ...

  9. 用MybatisPlus代码生成器生成代码

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  10. 谷粒学院-数据库设计、搭建项目环境、Mybatis-Plus代码生成器

    数据库设计规约 以下规约只针对本模块,更全面的文档参考<阿里巴巴Java开发手册>:五.MySQL数据库1.库名与应用名称尽量一致2.表名.字段名必须使用小写字母或数字,禁止出现数字开头, ...

最新文章

  1. 如果说编程语言是一种宗教,你的信仰是?
  2. 用Apache Hadoop和Apache Solr处理和索引医学图像
  3. Apache2 之虚拟主机设置指南
  4. 申请成功,庆祝一下。
  5. tomcat提高图片服务器性能,Tomcat性能调优(windows)
  6. 查看oracle当前的连接数
  7. 运行Fast R-CNN的代码
  8. windows phone 切换多语言时,商店标题显示错误的问题
  9. 开始学习《自己动手写操作系统》遇到的小问题.
  10. 庄懂技术美术入门课笔记_L13_特效类shader(AlphaBlendAlphaCutoutAdditice)
  11. TRAS为springcloud提供高性能的RPC能力
  12. Mac 修改移动硬盘图标,U盘图标
  13. 视频切割:python将视频文件按秒存储成图片
  14. 网易2017校招合唱团
  15. 解决169x/hao123浏览器劫持问题
  16. 深海油气开发利器——水下机器人
  17. java嫦娥_嫦娥回来了,还有哪些浪漫传说已经实现?
  18. linux环境下的进程
  19. python桌面_python写桌面
  20. iOS发布app到App Store教程

热门文章

  1. 大样本伯努利占比假设检验
  2. 2021-04-18 读书笔记-白鹿原
  3. 我始终相信努力奋斗的意义(共勉)
  4. 手机版mysql数据库管理_手机版mysql数据库管理
  5. WEB网站的注册、登录、验证码
  6. Scoop安装使用及卸载
  7. Explicit Intent Implicit Intent
  8. C6000 DSP优化技术入门
  9. 和学艺术朋友聊完后,发现学计算太幸运了
  10. 一名即将退休的架构师告诉Java程序员们如何投资自己