1 MyBatis-plus 介绍

MyBatis- plus是MyBatis的一个功能强大的加强工具包,用于简化开发。该工具包为MyBatis提供了一些高效、有用、开箱即用的个性,应用它能够无效地节俭开发工夫。

1.1 劣势

  1. MyBatis-plus 提供根底增删改查、分页查问等接口,可能无效简化开发,晋升开发效率。尤其是后盾管理系统、经营零碎等场景,特地适宜应用MyBatis-plus进行开发。
  2. 自带的代码生成器也很好用,能够生成器能够疾速生成Mapper.java、Mapper.xml、dao、service、controller层代码。
  3. 反对多种数据库:反对 mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss ,clickhouse,Sybase,OceanBase,Firebird,cubrid,goldilocks,csiidb 等多种数据库

2 spring-boot 整合 MyBatis-plus

2.1 导入pom依赖

<dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-boot-starter</artifactId>  <version>3.2.0</version></dependency><dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.17</version></dependency>

PS:能够自行批改版本。

2.2 配置数据库yml

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    username: root    password: 123456    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai    type: com.alibaba.druid.pool.DruidDataSource# Logger Configlogging:  level:    com.baomidou.mybatisplus.samples: debug

2.3 减少config文件

@Configuration@MapperScan("com.prepared.mapper")public class MybatisPlusConfig {}

PS: 如果须要分页,须要减少分页配置

    // 旧版//    @Bean//    public PaginationInterceptor paginationInterceptor() {//        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();//        // 设置申请的页面大于最大页后操作, true调回到首页,false 持续申请  默认false//        // paginationInterceptor.setOverflow(false);//        // 设置最大单页限度数量,默认 500 条,-1 不受限制//        // paginationInterceptor.setLimit(500);//        // 开启 count 的 join 优化,只针对局部 left join//        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));//        return paginationInterceptor;//    }    // 最新版@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));    return interceptor;}

2.4 集成代码生成器

导入pom包

<dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-generator</artifactId>  <version>3.4.1</version></dependency><dependency>  <groupId>org.freemarker</groupId>  <artifactId>freemarker</artifactId>  <version>2.3.28</version></dependency>

代码生成类

package com.prepared;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.core.toolkit.StringUtils;import com.baomidou.mybatisplus.generator.AutoGenerator;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.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;import java.util.List;import java.util.Scanner;// 演示例子,执行 main 办法控制台输出模块表名回车主动生成对应我的项目目录中public class CodeGenerator {    /**     * <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");        String projectPath = "/Users/shibo_zhong/Documents/workspace-prepared/spring-boot-learning/spring-boot-mybatis-plus";        gc.setOutputDir(projectPath + "/src/main/java");        gc.setAuthor("prepared");        gc.setOpen(true);        // gc.setSwagger2(true); 实体属性 Swagger2 注解        mpg.setGlobalConfig(gc);        // 数据源配置        DataSourceConfig dsc = new DataSourceConfig();        dsc.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8");        // dsc.setSchemaName("public");        dsc.setDriverName("com.mysql.cj.jdbc.Driver");        dsc.setUsername("root");        dsc.setPassword("123456");        mpg.setDataSource(dsc);        // 包配置        PackageConfig pc = new PackageConfig();        pc.setModuleName(scanner("模块名"));        pc.setParent("com");        mpg.setPackageInfo(pc);        // 自定义配置        InjectionConfig cfg = new InjectionConfig() {            @Override            public void initMap() {                // to do nothing            }        };        // 如果模板引擎是 freemarker        String templatePath = "/templates/mapper.xml.ftl";        // 如果模板引擎是 velocity        // String templatePath = "/templates/mapper.xml.vm";        // 自定义输入配置        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.setFileCreate(new IFileCreate() {            @Override            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {                // 判断自定义文件夹是否须要创立                checkDir("调用默认办法创立的目录,自定义目录用");                if (fileType == FileType.MAPPER) {                    // 曾经生成 mapper 文件判断存在,不想从新生成返回 false                    return !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("tuser").split(","));        strategy.setControllerMappingHyphenStyle(true);        strategy.setTablePrefix(pc.getModuleName() + "_");        mpg.setStrategy(strategy);        mpg.setTemplateEngine(new FreemarkerTemplateEngine());        mpg.execute();    }}

执行main办法,依照提醒输出即可生成代码

请输出模块名:prepared请输出tuser:tuser

生成代码如下所示:

3 验证

编写测试类

@RunWith(SpringRunner.class)@SpringBootTestpublic class MybatisPlusApplicationTests {    @Resource    private TuserMapper tuserMapper;    @Test    public void testAddUser() {        Tuser tuser = new Tuser();        tuser.setAge(1);        tuser.setIdCard("123415413");        tuser.setIsmale(Boolean.TRUE);        tuser.setName("prepared");        tuserMapper.insert(tuser);    }}

整合实现!

github开源地址

api文档

本文波及代码地址