整合MybatisPlus
导入依赖
1 <!--mysql--> 2 <dependency> 3 <groupId>mysql</groupId> 4 <artifactId>mysql-connector-java</artifactId> 5 <scope>runtime</scope> 6 </dependency> 7 <!--mybatPlus --> 8 <dependency> 9 <groupId>com.baomidou</groupId> 10 <artifactId>mybatis-plus-boot-starter</artifactId> 11 <version>3.4.3</version> 12 </dependency> 13 <!--生成器依赖--> 14 <dependency> 15 <groupId>com.baomidou</groupId> 16 <artifactId>mybatis-plus-generator</artifactId> 17 <version>3.4.1</version> 18 </dependency> 19 <!--MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:--> 20 <!--添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、 21 Freemarker、Beetl,用户可以选择自己熟悉的模板引擎, 22 如果都不满足您的要求,可以采用自定义模板引擎。--> 23 <dependency> 24 <groupId>org.freemarker</groupId> 25 <artifactId>freemarker</artifactId> 26 <version>2.3.31</version> 27 </dependency> 28 <!-- p6spy sql拦截调试--> 29 <dependency> 30 <groupId>p6spy</groupId> 31 <artifactId>p6spy</artifactId> 32 <version>3.9.0</version> 33 </dependency>
配置文件编写
1#--------------------配置数据源----------------# 2#---------------数据库连接配置-------------- 3#数据库连接池 4spring.datasource.type=com.zaxxer.hikari.HikariDataSource 5# 用户名 6spring.datasource.username=root 7# 密码 8spring.datasource.password=root 9#url 改为p6sp开头的连接url 10spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/blog?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&autoReconnect=true 11# 驱动名称 12# 需要调试拦截打印sql 驱动改为p6sp 拦截 13spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver 14#---------------数据库连接池HikariCP配置-------------- 15#最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size 16spring.datasource.hikari.minimum-idle=10 17#最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值 18spring.datasource.hikari.maximum-pool-size=20 19#空闲连接超时时间,默认值600000单位毫秒(10分钟), 20# 大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。 21spring.datasource.hikari.idle-timeout=500000 22#连接最大存活时间,不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短 23spring.datasource.hikari.max-lifetime=540000 24#连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒 25spring.datasource.hikari.connection-timeout=60000 26#用于测试连接是否可用的查询语句 27spring.datasource.hikari.connection-test-query=SELECT 1 28#--------------------mybatisPlus配置------------------ 29#mapper.xml 文件位置 30mybatis-plus.mapper-locations=classpath:mapper/*.xml 31#别名包扫描路径,通过该属性可以给包中的类注册别名 32mybatis-plus.type-aliases-package=cn.soboys.blogapi.entity 33#控制台打印mybatisPlus LOGO 34mybatis-plus.global-config.banner=true
添加mapper扫码
1@SpringBootApplication(scanBasePackages = {"cn.soboys"}) 2@MapperScan({"cn.soboys.blogapi.mapper"}) 3public class BlogApiApplication { 4 5 public static void main(String[] args) { 6 SpringApplication.run(BlogApiApplication.class, args); 7 } 8 9} 10
CRUD代码生成
编写代码生成模版工具类
1package cn.soboys; 2 3 4import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; 5import com.baomidou.mybatisplus.core.toolkit.StringPool; 6import com.baomidou.mybatisplus.core.toolkit.StringUtils; 7import com.baomidou.mybatisplus.generator.AutoGenerator; 8import com.baomidou.mybatisplus.generator.InjectionConfig; 9import com.baomidou.mybatisplus.generator.config.*; 10import com.baomidou.mybatisplus.generator.config.po.TableInfo; 11import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; 12import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; 13 14import java.util.ArrayList; 15import java.util.List; 16import java.util.Scanner; 17 18/** 19 * @author kenx 20 * @version 1.0 21 * @date 2021/6/28 11:31 22 * 自动代码生成器 23 */ 24public class MyBatisGeneratorCode { 25 /** 26 * <p> 27 * 读取控制台内容 28 * </p> 29 */ 30 public static String scanner(String tip) { 31 Scanner scanner = new Scanner(System.in); 32 StringBuilder help = new StringBuilder(); 33 help.append("请输入" + tip + ":"); 34 System.out.println(help.toString()); 35 if (scanner.hasNext()) { 36 String ipt = scanner.next(); 37 if (StringUtils.isNotBlank(ipt)) { 38 return ipt; 39 } 40 } 41 throw new MybatisPlusException("请输入正确的" + tip + "!"); 42 } 43 44 public static void main(String[] args) { 45 // 代码生成器 46 AutoGenerator mpg = new AutoGenerator(); 47 48 // 全局配置 49 GlobalConfig gc = new GlobalConfig(); 50 String projectPath = System.getProperty("user.dir"); 51 gc.setOutputDir(projectPath + "/src/main/java"); 52 gc.setAuthor("kenx"); 53 gc.setOpen(false); 54 // gc.setSwagger2(true); 实体属性 Swagger2 注解 55 mpg.setGlobalConfig(gc); 56 57 // 数据源配置 58 DataSourceConfig dsc = new DataSourceConfig(); 59 dsc.setUrl("jdbc:mysql://localhost:3306/blog?useUnicode=true&useSSL=false&characterEncoding=utf8"); 60 // dsc.setSchemaName("public"); 61 dsc.setDriverName("com.mysql.jdbc.Driver"); 62 dsc.setUsername("root"); 63 dsc.setPassword("root"); 64 mpg.setDataSource(dsc); 65 66 // 包配置 67 PackageConfig pc = new PackageConfig(); 68 //pc.setModuleName(scanner("模块名")); 69 pc.setParent("cn.soboys.blogapi"); 70 mpg.setPackageInfo(pc); 71 72 // 自定义配置 73 InjectionConfig cfg = new InjectionConfig() { 74 @Override 75 public void initMap() { 76 // to do nothing 77 } 78 }; 79 80 // 如果模板引擎是 freemarker 81 String templatePath = "/templates/mapper.xml.ftl"; 82 // 如果模板引擎是 velocity 83 // String templatePath = "/templates/mapper.xml.vm"; 84 85 // 自定义输出配置 86 List<FileOutConfig> focList = new ArrayList<>(); 87 // 自定义配置会被优先输出 88 focList.add(new FileOutConfig(templatePath) { 89 @Override 90 public String outputFile(TableInfo tableInfo) { 91 // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! 92 return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() 93 + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; 94 } 95 }); 96 /* 97 cfg.setFileCreate(new IFileCreate() { 98 @Override 99 public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { 100 // 判断自定义文件夹是否需要创建 101 checkDir("调用默认方法创建的目录,自定义目录用"); 102 if (fileType == FileType.MAPPER) { 103 // 已经生成 mapper 文件判断存在,不想重新生成返回 false 104 return !new File(filePath).exists(); 105 } 106 // 允许生成模板文件 107 return true; 108 } 109 }); 110 */ 111 cfg.setFileOutConfigList(focList); 112 mpg.setCfg(cfg); 113 114 // 配置模板 115 TemplateConfig templateConfig = new TemplateConfig(); 116 117 // 配置自定义输出模板 118 //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 119 // templateConfig.setEntity("templates/entity2.java"); 120 // templateConfig.setService(); 121 // templateConfig.setController(); 122 123 templateConfig.setXml(null); 124 mpg.setTemplate(templateConfig); 125 126 // 策略配置 127 StrategyConfig strategy = new StrategyConfig(); 128 strategy.setNaming(NamingStrategy.underline_to_camel); 129 strategy.setColumnNaming(NamingStrategy.underline_to_camel); 130 //strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!"); 131 strategy.setEntityLombokModel(true); 132 strategy.setRestControllerStyle(true); 133 // 公共父类 134 //strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!"); 135 // 写于父类中的公共字段 136 strategy.setSuperEntityColumns("id"); 137 strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); 138 strategy.setControllerMappingHyphenStyle(true); 139 strategy.setTablePrefix(pc.getModuleName() + "_"); 140 mpg.setStrategy(strategy); 141 mpg.setTemplateEngine(new FreemarkerTemplateEngine()); 142 mpg.execute(); 143 } 144}
生成CRUD

这样生成功,节省大量开发时间,提供我们开发效率

然后我们根据后期业务删除多余不想要的代码就行
关于SpringBoot整合MybatisPlus详细教程请参考我上篇文章 pringBoot2.4.x整合Mybatis-Plus3.4.x(详细教程)
关注公众号猿小叔获取更多干货分享
