mybatis插件自动生成各层代码方式

背景介绍

在项目中我们使用mybatis时,总要写数据库字段和实体类对应的映射文件,那时候简单而又繁琐的工作令我们很烦,但是mybatis为了能更快的生成代码,使用插件就能简单的生成功能实现,实现的方式有如下两种:

1.mybatis-generator
使用这个插件能生成简单的xml文件(包含简单的crud的方法实现)、mapper文件、以及实体类

//安装插件
<plugin>                
<groupId>org.mybatis.generator</groupId>                    
<artifactId>mybatis-generator-maven-plugin</artifactId>               
 <version>1.3.2</version>                
</plugin>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>

<classPathEntry location="D:\JavaDeveloper\MavenRepository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar"/>

<context id="mysqlTables" targetRuntime="MyBatis3">
<commentGenerator>

<property name="suppressAllComments" value="true"/>
</commentGenerator>

<!-- 数据库连接-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://xxx/akcms?tinyInt1isBit=false"
userId="mima" password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>

<!-- model类生成位置 -->
<javaModelGenerator targetPackage="com.akucun.cms.dao.po.assets" targetProject="akucun-cms-dao">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>

<!-- XML文件生成位置 -->
<sqlMapGenerator targetPackage="mapper.assets" targetProject="akucun-cms-dao/src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>

<!-- DAO层方法生成位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.akucun.cms.dao.mapper.assets" targetProject="akucun-cms-dao">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>

<!-- 设置表的名称,已经实体类的名称 -->
<table tableName="akc_tabber_deploy" domainObjectName="AkcTabberDeployPO"
enableDeleteByExample="false" enableDeleteByPrimaryKey="false" enableUpdateByExample="false"></table>
</context>
</generatorConfiguration>

使用方法,使用idea在右侧插件目录会自动生成插件,点击运行就行。

2.mybatis-plus-generator
这个插件相对于上面那个插件就是自动回继承BaseMapper,自定义的mapper里面没有实现方法,但是会自动生成service业务层代码,而不要自己去实现。

//引入pom文件
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
2.配置文件
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.isNotEmpty(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");
System.out.println("projectPath="+projectPath);            //项目路径
gc.setOutputDir(projectPath + "/akucun-cms-manager/src/main/java"); //具体输出到哪文件夹下面
gc.setFileOverride(true);
gc.setAuthor("pwade");//开发人员
gc.setOpen(true);//是否打开输出目录
gc.setServiceName("%sService");//service 命名方式
gc.setServiceImplName("%sServiceImpl");//service impl 命名方式
// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setFileOverride(true);
gc.setActiveRecord(true);
gc.setEnableCache(false);// XML 二级缓存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
mpg.setGlobalConfig(gc);

// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://192.168.120.50:3306/akcms?useUnicode=true&characterEncoding=UTF-8");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("merchant");
dsc.setPassword("123456");
mpg.setDataSource(dsc);

// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(scanner("模块名"));                          //包含一下包的一个文件夹
pc.setEntity("entity");                                  //设置包
pc.setController("controller1");
pc.setMapper("mapper");
pc.setService("service");
pc.setParent("com.akucun.cms");
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 + "/akucun-cms-manager/src/main/resources/mapper/"            //输出xml文件到哪
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});

/* / cfg.setFileCreate(new IFileCreate() {
@Override
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
// 判断自定义文件夹是否需要创建
checkDir("调用默认方法创建的目录");
return false;
}
});*/
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("com.baomidou.ant.common.BaseEntity");    //设置实体类的父类
strategy.setEntityLombokModel(true);  / /【实体】是否为lombok模型(默认 false)
strategy.setRestControllerStyle(true);  //生成 @RestController 控制器
strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); //设置controller的父类
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setSuperEntityColumns("id");
strategy.setControllerMappingHyphenStyle(true); //驼峰转连字符
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}

}
实现分页功能
3.实现分页
@EnableTransactionManagement
@Configuration
@MapperScan({"com.akucun.cms.dao.mapper"})
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

Page<AkcCustomPage> selectPageVo(Page page, @Param("state") Integer state); 

使用方法就是运行这个main函数,然后在控制台输入模板名(代码在哪个包下)以及表的名称就行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值