注意版本:Springboot 2.1.5、Mybatis-Plus 3.3.0
参考官方文档:https://mybatis.plus/
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.3.0version>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.3.0version>
dependency>
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
dependency>
此处使用了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
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;
直接贴代码,记录下需要注意的地方。
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中的模块名可加可不加。
执行run方法,控制台输入包名(若需要)和表名,回车即可。
生成目录之后,启动类添加@MapperScanner包扫描
@MapperScan("com.haocheng.study.springboot.mybatisplus.*.mapper")
条件构造器可以构造一些查询条件来获取我们指定的值,同时可以结合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);
}
当然,条件构造器的用法还有许许多多,这里就不在一一罗列,有需要的同学可以去官网查看文档
新增配置类:
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