一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - mybatis-plus生成mapper擴展文件的方法

mybatis-plus生成mapper擴展文件的方法

2020-09-02 00:37sinat_30735061 Java教程

這篇文章主要介紹了mybatis-plus生成mapper擴展文件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

閱讀提示

  具有mybatis基礎,熟練使用mybatis-plus。

概述

  我們都知道,mybatis-plus是一個mybatis的增強工具,為簡化開發、提高效率而生,我們經常使用mybatis-plus生成controller、service、mapper等文件,對于簡單的curd,可以直接使用mybatis-plus封裝好的方法。

  然而,我們經常有這樣那樣的需求,需要額外編寫sql實現,如果直接在mapper.xml文件中編寫,一旦數據庫表結構改動需要重新生成文件就悲催了,不得不花大量精力修改代碼。所以,這里介紹一種方式,自動生成mapper擴展文件,我們自定義編寫的程序存放在擴展文件中,這樣在數據庫表結構改動時,不用擔心程序會被覆蓋,也不用修改代碼。

mybatis-plus版本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.2.0</version>
</dependency>
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.2.0</version>
</dependency>
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.1</version>
</dependency>

mybatis-plus生成mapper擴展文件

  熟悉mybatis-plus的朋友都知道,mybatis-plus提供了一款代碼生成器,可以自動生成代碼,我們就從這款代碼生成器入手。

  代碼生成器配置完畢后,運行時會執行 AutoGenerator.execute() 方法,我們先看看這個東東

mybatis-plus生成mapper擴展文件的方法

熟悉的GlobalConfig、DataSourceConfig等等就不介紹了,我們關注的是InjectionConfig、TemplateConfig和ConfigBuilder。這里先講述一下我們的思路:把ext文件通過配置直接生成,并保留mybatis-plus為service擴展的批量操作,我們需要三個文件,第一個文件生成ext.java,第二個文件生成ext.xml,第三個覆蓋serviceImpl文件(保留mybatis-plus為service擴展的批量操作)

mybatis-plus生成mapper擴展文件的方法

**************************干貨來咯**************************

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// 生成目錄
public static final String OUTPUT_DIR = "項目路徑/src/main/java";
// mapperExt目錄
public static final String MAPPER_EXT = "ext目錄";
 
// 模板配置,這里可以自定義模板路徑,如果路徑如下所示,則該部分可以省略
TemplateConfig tc = new TemplateConfig();
tc.setServiceImpl("templates/serviceImpl.java");
ag.setTemplate(tc);
 
// 自定義配置
InjectionConfig cfg = new InjectionConfig() {
  @Override
  public void initMap() {
    Map<String, Object> map = new HashMap<>(10);
    /// 這里可以在 VM 文件中用 ${cfg.MapperExt} 引用該值
    map.put("MapperExt", MAPPER_EXT.replace('/', '.'));
    this.setMap(map);
  }
};
 
// 自定義輸出配置
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("templates/mapperExt.xml.vm") {
  @Override
  public String outputFile(TableInfo tableInfo) {
    return String.format("%s/%s/%sMapperExt%s", OUTPUT_DIR, MAPPER_EXT, tableInfo.getEntityName(), StringPool.DOT_XML);
  }
});
focList.add(new FileOutConfig("templates/mapperExt.java.vm") {
  @Override
  public String outputFile(TableInfo tableInfo) {
    return String.format("%s/%s/%sMapperExt%s", OUTPUT_DIR, MAPPER_EXT, tableInfo.getEntityName(), StringPool.DOT_JAVA);
  }
});
cfg.setFileCreate(new IFileCreate() {
  @Override
  public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
    // 如果是 mapperExt、service、controller 文件,并且已存在則不創建
    if (filePath.contains(MAPPER_EXT) || fileType == FileType.CONTROLLER || fileType == FileType.SERVICE || fileType == FileType.SERVICE_IMPL) {
        if (new File(filePath).exists()) {
        return false;
      }
    }
    // 判斷文件夾是否需要創建
    checkDir(filePath);
    return true;
  }
});
cfg.setFileOutConfigList(focList);
ag.setCfg(cfg);

mapperExt.java.vm配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package ${cfg.MapperExt};
 
import ${package.Mapper}.${table.mapperName};
 
/**
 * <p>
 * $!{table.comment} MapperExt 接口
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${kotlin})
interface ${table.mapperName}Ext : ${table.mapperName}
#else
public interface ${table.mapperName}Ext extends ${table.mapperName} {
 
}
#end

mapperExt.xml.vm配置

?
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${cfg.MapperExt}.${table.mapperName}Ext">
 
</mapper>

serviceImpl.java.vm配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package ${package.ServiceImpl};
 
import ${package.Entity}.${entity};
import ${cfg.MapperExt}.${table.mapperName}Ext;
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
 
/**
 * <p>
 * $!{table.comment} 服務實現類
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Service
#if(${kotlin})
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}Ext, ${entity}>(), ${table.serviceName} {
 
}
#else
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}Ext, ${entity}> implements ${table.serviceName} {
 
}
#end

新思路(2020-04-17補充)

  我們概述中所述問題真的存在嗎?mybatis-plus如果需要擴展文件那么他為什么不提供呢?當然是問題不存在,根本不需要擴展文件,如果你存在這樣的問題,你總是覆蓋文件說明你的用法有問題。

  這里直接說應該怎么使用,我們把本文所述的擴展的.vm文件通通刪掉,InjectionConfiginitMap方法清空,focList相關全部刪除,修改cfg.setFileCreate(...)如下所示

?
1
2
3
4
5
6
7
8
9
10
11
12
cfg.setFileCreate(new IFileCreate() {
  @Override
  public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
    // 如果已存在并且不是實體類則不創建
    if (new File(filePath).exists() && fileType != FileType.ENTITY) {
      return false;
    }
    // 判斷文件夾是否需要創建
    checkDir(filePath);
    return true;
  }
});

  我們分析下:文件不存在一般是我們剛剛新建數據庫表或者新增了一個表,此時肯定是要創建文件的。文件存在的時候分兩種情況,一是文件是實體類,為了應對將來可能的新增修改刪除字段,必須重寫,那么使用時不能對該實體做任何增刪改操作;二是文件非實體類,也就是service、map、xml等,因為代碼生成和第一次生成沒有什么區別,也就沒有重寫的必要,而且很多時候也已經編寫了代碼。

  如此,我們使用的時候只需要修改我們要生成的表就行了,即使把數據庫表全部作為要生成的表也無所謂啦!

到此這篇關于mybatis-plus生成mapper擴展文件的方法的文章就介紹到這了,更多相關mybatis-plus生成mapper擴展文件內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/sinat_30735061/article/details/105444871

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草视频在线观看免费视频 | 亚洲六月丁香六月婷婷蜜芽 | 亚洲精品一区二区久久这里 | 欧美成人手机 | 亚洲欧美天堂综合久久 | 175m美女被网友灌醉啪啪玩脚 | 免费又爽又黄禁片视频在线播放 | 亚洲美日韩 | 我的妹妹最近有点怪免费播放 | 欧美第一视频 | 国产精品福利在线观看秒播 | 国产精品一区二区三区久久 | 国产精品理论片在线观看 | 无码一区二区三区视频 | 欧美一区精品 | 美女1819xxxx| 四虎四虎| 成人福利在线播放 | 好硬好大好浪夹得好紧h | 91影视在线看免费观看 | 亚洲成人综合在线 | ak福利影院 | 精品区2区3区4区产品乱码9 | 农夫69小说恋老妇小说 | 亚洲成人贴图 | 思思玖玖玖在线精品视频 | 日本一区二区免费在线 | 免费草比视频 | 欧美人伦禁忌.5 | 无码AV熟妇素人内射V在线 | 国产成人一区二区三区视频免费蜜 | 亚洲欧美在线免费 | 探花 在线 | 91肥熟国产老肥熟在线 | 色中色破解版 | 国产99精品视频 | 欧美一卡二卡科技有限公司 | 国产欧美视频在线观看 | 日本三级做a全过程在线观看 | 无套内射在线观看THEPORN | 亚洲色图影院 |