mp为我们提供了代码生成器,可以根据数据库sql表生成crud,包括实体类
controller、service和mapper等,功能非常的强大。
代码模板:
通过网盘分享的文件:分享的一些资源
链接: https://pan.baidu.com/s/1j6_v-zyGQbqmx_zkWvFVMQ?pwd=rjs7 提取码: rjs7
--来自百度网盘超级会员v4的分享
1.导入maven坐标
<!--mbyatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!--mybatis-plus-generator 代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!--beetl模板引擎-->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.15.4.RELEASE</version>
</dependency>
2.复制生成代码
这是一个main方法的代码,运行即可。 代码添加了注释,根据自己的实际项目和需求去修改。
package com.njitzx;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.config.po.TableField;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.BeetlTemplateEngine;
import com.google.common.base.CaseFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CodeGenerator {
private static String projectPath = "E:\\NJITZX大三上\\backCode\\mavenLearn\\mp-generate";
public static void main(String[] args) {
// 代码生成器
AutoGenerator generator = new AutoGenerator();
// 1、全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("周鑫");
gc.setOpen(false);
gc.setFileOverride(true); // 重新生成时文件是否覆盖
gc.setServiceName("%sService"); // Service接口的命名方式
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
generator.setGlobalConfig(gc);
// 2、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/springboot2?useUnicode=true&useSSL=false&characterEncoding=utf8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
generator.setDataSource(dsc);
// 3、包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.njitzx");
pc.setEntity("entity"); // entity 层
pc.setMapper("mapper"); // mapper 层
pc.setService("service"); // service层
pc.setController("controller"); // controller 层
generator.setPackageInfo(pc);
// 4、自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setTablePrefix("t_"); // 过滤表前辍
strategy.setNaming(NamingStrategy.underline_to_camel); //数据库表映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel); //数据库列映射到实体属性的命名策略
strategy.setEntityLombokModel(true); // lombok 模型
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
// 逻辑删除
strategy.setLogicDeleteFieldName("is_deleted");
// 自动填充
List<TableFill> tableFillList = new ArrayList<>();
tableFillList.add(new TableFill("create_time", FieldFill.INSERT));
tableFillList.add(new TableFill("update_time", FieldFill.INSERT_UPDATE));
strategy.setTableFillList(tableFillList);
generator.setStrategy(strategy);
// 6、设置解析模板
generator.setTemplateEngine(new BeetlTemplateEngine() {
// 获取主键
String primaryKey = "";
String primaryKeyUnderline="";
@Override
public AbstractTemplateEngine init(ConfigBuilder configBuilder) {
AbstractTemplateEngine engine = super.init(configBuilder);
// 映射文件放到resources目录下
configBuilder.getPathInfo().put("xml_path", projectPath + "/src/main/resources/mapper/" + pc.getModuleName());
return engine;
}
@Override
public Map<String, Object> getObjectMap(TableInfo tableInfo) {
for (TableField tableField : tableInfo.getFields()) {
if (tableField.isKeyFlag()) {
primaryKey = tableField.getPropertyName();
primaryKeyUnderline = tableField.getName();
break;
}
}
// 获取源码中的map
Map objectMap = super.getObjectMap(tableInfo);
// 额外添加两个键值对
objectMap.put("entityCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, tableInfo.getEntityName()));
objectMap.put("primaryKey", primaryKey);
objectMap.put("primaryKeyUnderline", primaryKeyUnderline);
return objectMap;
}
});
// 7、执行生成
generator.execute();
}
}
3. 代码模板
mp为我们提供了一些模板,但是这些模板都比较简单,我们可以自己根据模板引擎的语法自定义模板,放在resources目录下面。
这里是btl 结尾的,和导入的maven坐标当好对应
4.运行生成器代码
自动生成基本的crud接口。
5.配置其他项
上面只是完成了最基础的crud,项目还需要配置其他的环境。
Result请求、想要分页还需要配置拦截器,包括yml下面的配置。
使用api接口可以进行测试,代码是完好的。