Springboot2.x总结——整合Mybatis-Plus 3.3.0

注意版本:Springboot 2.1.5、Mybatis-Plus 3.3.0
参考官方文档:https://mybatis.plus/

1. 引入相关依赖
<!-- 引入mybatis-plus -->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.3.0</version>
</dependency>

<!-- 代码生成器依赖  V3.0.3+ -->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-generator</artifactId>
	<version>3.3.0</version>
</dependency>

<!-- freemarker模板引擎依赖 -->
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
</dependency>
2. 配置文件

此处使用了application.yml风格,也可用properties,可根据个人习惯使用。

server:
  port: 9999
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
mybatis-plus:
  config-location:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql
logging:
  level:
    com.haocheng.study.springboot.mybatisplus: debug
3. 建表
 CREATE TABLE `chengji` (
  `id` int(20) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `sub` varchar(255) DEFAULT NULL,
  `grade` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4. 代码生成器

直接贴代码,记录下需要注意的地方。

package com.haocheng.study.springboot.mybatisplus.config;

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;

/**
 * MP自动生成代码 —— V3.3.0
 *
 * @Attention: 需手动添加generator依赖
 *
 *
 * @Author: haocheng
 * @Date: 2019-12-16 11:24
 */
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 auto = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("haocheng");
        gc.setOpen(false);
        // gc.setSwagger2(true); 实体属性 Swagger2 注解
        auto.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC&useSSL=false");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        auto.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模块名"));
        pc.setParent("com.haocheng.study.springboot.mybatisplus");
        auto.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.setFileOutConfigList(focList);
        auto.setCfg(cfg);

        // 模板配置
        TemplateConfig tmpConfig = new TemplateConfig();
        tmpConfig.setXml(null);
        auto.setTemplate(tmpConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//        strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
//        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        // 写于父类中的公共字段
        strategy.setSuperEntityColumns("id");
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        auto.setStrategy(strategy);
        auto.setTemplateEngine(new FreemarkerTemplateEngine());
        auto.execute();
    }

}

注:PackageConfig中的模块名可加可不加。

  • 若需要模块名,则结构为

在这里插入图片描述

  • 若无需模块名,则生成的controller,entity,mapper,service位于父包目录下(即Application启动类所在目录),同时,需要修改自定义配置中xml文件的输出路径(去掉红框中内容即可),如下图所示;否则,在resources/mapper下会出现名为null的目录。

在这里插入图片描述
执行run方法,控制台输入包名(若需要)和表名,回车即可。
在这里插入图片描述
生成目录之后,启动类添加@MapperScanner包扫描

@MapperScan("com.haocheng.study.springboot.mybatisplus.*.mapper")
5. 测试

在这里插入图片描述
在这里插入图片描述

6. 条件构造器

条件构造器可以构造一些查询条件来获取我们指定的值,同时可以结合Lambda表达式来使用,下面我们直接来编写两个例子:

controller层:

@GetMapping("/getByName")
public Chengji getByName(String name){
    return chengjiService.getByName(name);
}

service层:

@Override
public Chengji getByName(String name) {
    QueryWrapper<Chengji> wrapper = new QueryWrapper<>();
    wrapper.lambda().eq(Chengji::getName, name);
    return chengjiMapper.selectOne(wrapper); 
}

当然,条件构造器的用法还有许许多多,这里就不在一一罗列,有需要的同学可以去官网查看文档

7. 分页查询

新增配置类:

package com.haocheng.study.springboot.mybatisplus.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @Author: haocheng
 * @Date: 2019-12-16 15:11
 */
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        return paginationInterceptor;
    }
}

我们只需要构建一个Page对象,并初始化我们所需的页数(page)和每页数据量(pageSize),然后将其作为page()方法的参数传入即可。
例:获取id>3的分页数据

/**
 * 分页查询
 */
@GetMapping("/get4Page")
public IPage<Chengji> get4Page(String id){
    Page<Chengji> page = new Page<>(1,3);
    QueryWrapper<Chengji> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda().gt(Chengji::getId, id);
    return chengjiService.page(page, queryWrapper);
}

看下控制台:
在这里插入图片描述
结果:
在这里插入图片描述
github地址:https://github.com/haocheng23/springboot-mybatis-plus.git

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值