美文网首页
实战代码(十三):Springboot集成Mybatis-Plu

实战代码(十三):Springboot集成Mybatis-Plu

作者: LY丶Smile | 来源:发表于2021-01-17 21:19 被阅读0次

    一、理论基础

    MyBatis-Plus 是MyBatis的增强工具,配合Lombok,可以极大的减少代码量、提升开发效率。

    Mybatis-Plus的文档介绍很详细,这里只说下个人的使用感受

    • 使用简单,少量的操作便可以完成CRUD的全部工作,可以让人把绝大部分精力放在业务逻辑上。
    • 多数据源管理、分页插件等常用的功能都支持的很好
    • 代码生成器简单好用,可以极为快速的实现CRUD
    • 官方文档更新及时,而且极为详细,根据文档可以很容易的实现一个demo,本文完全是按照文档做的小demo。
    • 有着完善的示例代码,各种常用的功能都能找到官方的示例


    官方文档
    官方示例代码

    二、实战代码

    2.1 依赖引入

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.1</version>
    </dependency>
    <!-- mybatis plus 代码生成器 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.4.1</version>
    </dependency>
    <!-- mybatisplus 代码生成器模板 -->
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.30</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    

    2.2 配置文件

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useSSL=false
        username: root
        password: yang2020
    

    2.3 分页插件配置

    @Configuration
    @MapperScan("com.smile.demo.mybatisplus.demo.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);
        }
    }
    

    2.4 代码生成器

    /**
     * mybatis plus代码生成器
     * - 官方文档地址:https://mybatis.plus/guide/generator.html#使用教程
     */
    public class CodeGenerator {
    
        private static final String ROOT_PACKAGE = "com.smile.demo.mybatisplus";
        private static final String AUTHOR = "Smile";
        private static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&useSSL=false&characterEncoding=utf8";
        private static final String DB_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
        private static final String DB_USERNAME = "root";
        private static final String DB_PASSWORD = "yang2020";
    
        /**
         * <p>
         * 读取控制台内容
         * </p>
         */
        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 + "/src/main/java");
            gc.setAuthor(AUTHOR);
            gc.setOpen(false);
            mpg.setGlobalConfig(gc);
    
            // 数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl(DB_URL);
            dsc.setDriverName(DB_DRIVER_NAME);
            dsc.setUsername(DB_USERNAME);
            dsc.setPassword(DB_PASSWORD);
            mpg.setDataSource(dsc);
    
            // 包配置
            PackageConfig pc = new PackageConfig();
            pc.setModuleName(scanner("包名"));
            pc.setParent(ROOT_PACKAGE);
            mpg.setPackageInfo(pc);
    
            // 自定义配置
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    // to do nothing
                }
            };
    
            // 模板引擎是 freemarker
            String templatePath = "/templates/mapper.xml.ftl";
    
            // 自定义输出配置
            List<FileOutConfig> focList = new ArrayList<>();
            // 自定义配置会被优先输出
            focList.add(new FileOutConfig(templatePath) {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                    return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                            + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
                }
            });
            cfg.setFileOutConfigList(focList);
            mpg.setCfg(cfg);
    
            // 配置模板
            TemplateConfig templateConfig = new TemplateConfig();
    
            templateConfig.setXml(null);
            mpg.setTemplate(templateConfig);
    
            // 策略配置
            StrategyConfig strategy = new StrategyConfig();
            strategy.setNaming(NamingStrategy.underline_to_camel);
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            strategy.setEntityLombokModel(true);
            strategy.setRestControllerStyle(true);
            strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
            strategy.setControllerMappingHyphenStyle(true);
            strategy.setTablePrefix(pc.getModuleName() + "_");
            mpg.setStrategy(strategy);
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
            mpg.execute();
        }
    
    }
    

    2.5 简单的示例

    全部源码见GitHub,点击进入

    // 分页
    super.page(new Page<>(pageNo, pageSize))
    // 根据参数读取单条数据
    UserInfo userInfo = super.getOne(new QueryWrapper<UserInfo>().lambda().eq(UserInfo::getId, userId));
    

    2.6 条件构造器

    详见官方文档

    相关文章

      网友评论

          本文标题:实战代码(十三):Springboot集成Mybatis-Plu

          本文链接:https://www.haomeiwen.com/subject/fosvaktx.html