天天看點

Mybatis Plus+velocity自動生成代碼

Mybatis+velocity自動生成代碼

myBatis-Plus結合velocity模闆配置基礎資訊生成代碼

1.首先導入velocity的包

    <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
    </dependency>           

2.初始化參數

    //項目存儲位置
    public static String PROJECT_GENERATE_DISK = "";
    //包名
    public static String PACKAGE_NAME= "";
    //資料庫位址
    public static String DB_URL = "";
    //資料庫執行個體名
    public static String DRIVER_CLASS_NAME = "";
    //資料庫類型
    public static String DB_TYPE = "";
    //資料庫使用者
    public static String USER = "";
    //資料庫密碼
    public static String PASSWORD = "";
    //資料庫schema
    public static String SCHEMA = "";
    //要查詢的表名
    public static String TABLE_NAMES = "";
    //建立人
    public static String AUTHOR = "";
    //是否強制帶上注解
    public static boolean ENABLE_TABLE_FIELD_ANNOTATION = false;
    //生成的注解帶上IdType類型
    public static IdType TABLE_IDTYPE = null;
    //是否去掉生成實體的屬性名字首
    public static String[] FIELD_PREFIX = null;
    //生成的Service 接口類名是否以I開頭 預設是以I開頭  user表 -> IUserService, UserServiceImpl
    public static boolean SERVICE_CLASS_NAME_START_WITHI = false;
    //jsp生成位址
    public static String JSP_URL="";           

3.全局配置

 private static GlobalConfig GlobalGenerate(){
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(false)// 不需要ActiveRecord特性的請改為false
            .setIdType(TABLE_IDTYPE)
            .setEnableCache(false);// XML 二級緩存
            .setAuthor(AUTHOR)
            .setBaseResultMap(true)// XML ResultMap
            .setBaseColumnList(false);// XML columList
            .setOutputDir(PROJECT_GENERATE_DISK+"\\java")
            .setFileOverride(true)
            .setControllerName("%sAction")//自定義檔案命名,注意 %s 會自動填充表實體屬性!
            ;
        if (!SERVICE_CLASS_NAME_START_WITHI) {
            config.setServiceName("%sService");
        }
           return config;
     }           

4.資料源配置

 private static DataSourceConfig DaoSourceGenerate(){
      DataSourceConfig dataSourceConfig = new DataSourceConfig();
           DbType type=null;
           if("oracle".equals(DB_TYPE)){
               type=DbType.ORACLE;
           }else if("sql_server".equals(DB_TYPE)){
               type=DbType.SQL_SERVER;
           }else if("mysql".equals(DB_TYPE)){
               type=DbType.MYSQL;
           }else if("postgre_sql".equals(DB_TYPE)){
               type=DbType.POSTGRE_SQL;
           }
           dataSourceConfig.setDbType(type)//資料庫類型
               .setUrl(DB_URL)//資料庫位址
               .setUsername(AutoGenerateUtil.DB_TYPE)//資料庫使用者名
               .setPassword(AutoGenerateUtil.PASSWORD)//資料庫密碼
               .setDriverName(AutoGenerateUtil.DRIVER_CLASS_NAME)//執行個體名
               .setSchemaname(AutoGenerateUtil.SCHEMA);
           return dataSourceConfig;
     }           

5.政策配置

 private static StrategyConfig StrategyGenerate(){
    StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
            .setVersionFieldName("version")
            .setCapitalMode(true)// 全局大寫命名 ORACLE 注意
            .setEntityLombokModel(false)
            .setDbColumnUnderline(true)
            .setNaming(NamingStrategy.underline_to_camel)// 表名生成政策
            .entityTableFieldAnnotationEnable(ENABLE_TABLE_FIELD_ANNOTATION)
            .fieldPrefix(FIELD_PREFIX)//test_id -> id, test_type -> type
            .setInclude(TABLE_NAMES);//修改替換成你需要的表名,多個表名傳數組
            .setExclude(new String[]{"test"}); // 排除生成的表
            .setTablePrefix(new String[] { "tlog_", "tsys_" });// 此處可以修改為您的表字首
             .setSuperEntityClass("com.lin.demo.TestEntity");// 自定義實體父類
            .setSuperEntityColumns(new String[] { "test_id","age" });// 自定義實體,公共字段
            .setSuperMapperClass("com.lin.demo.TestMapper");// 自定義 mapper 父類
             .setSuperServiceClass("com.lin.demo.TestService");// 自定義 service 父類
            .setSuperServiceImplClass("com.lin.demo.TestServiceImpl");// 自定義 service 實作類父類
             .setSuperControllerClass("com.lin.demo.TestController");// 自定義 controller 父類
            .setEntityColumnConstant(true);// 【實體】是否生成字段常量(預設 false)public static final String ID = "test_id";
            .setEntityBuilderModel(true);// 【實體】是否為建構者模型(預設 false)public User setName(String name) {this.name = name; return this;}
         return strategyConfig;           

6.自定義模闆配置

 private static TemplateConfig TemplateGenerate(){
    TemplateConfig templateConfig = new TemplateConfig()
        .setXml("/template/mapper2.xml")//注意:不要帶上.vm
        .setController("/template/action.java")
        .setMapper("/template/mapper.java")
        .setXml("/template/mapper.xml")
        .setService("/template/service.java")
        .setServiceImpl("/template/serviceImpl.java")
        ;
     return templateConfig;
     }           

7.自定義檔案及key

private static InjectionConfig FileGenerate(){
      InjectionConfig injectionConfig = new InjectionConfig() {
            @Override
            public void initMap() {//自定義參數
                Map<String, Object> map = new HashMap<>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                this.setMap(map);
            }
        };
        
        // 自定義 xxList.jsp 生成
        List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
        //建立jsp目錄
        Files files = new Files(JSP_URL);
        files.createlist();
        //生成清單頁面
        focList.add(new FileOutConfig("/template/list.jsp.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return JSP_URL+"\\list.jsp";
            }
        });
        injectionConfig.setFileOutConfigList(focList);
        return injectionConfig;
     }           

8.包配置

 public static PackageConfig PackageGenerate(){
         PackageConfig pc = new PackageConfig()
             .setParent("com")
             .setModuleName(PACKAGE_NAME)
             .setController("action")
             .setEntity("entity")
             .setMapper("mapper")
             .setXml("mapper");
         return pc;
     }           

9.生成代碼

  public void generateByTablesWithInjectConfig() {
        //全局配置
        GlobalConfig config =AutoGenerateUtil.GlobalGenerate();
        //配置資料源
        DataSourceConfig dataSourceConfig=AutoGenerateUtil.DaoSourceGenerate();
        //配置政策
        StrategyConfig strategyConfig = AutoGenerateUtil.StrategyGenerate();
        //配置模闆
        TemplateConfig templateConfig = AutoGenerateUtil.TemplateGenerate();
        //生成jsp檔案
        InjectionConfig injectionConfig = AutoGenerateUtil.FileGenerate();
        //配置包
        PackageConfig packageConfig=AutoGenerateUtil.PackageGenerate();
        //生成代碼
        new AutoGenerator()
            .setGlobalConfig(config)
            .setTemplate(templateConfig)//自定義模闆路徑
            .setCfg(injectionConfig)
            .setDataSource(dataSourceConfig)
            .setStrategy(strategyConfig)
            .setPackageInfo(packageConfig)
            .execute();
    }           

10.調用方法并配置基礎參數就可生成模闆啦

    AutoGenerateUtil generatorServiceEntity=new AutoGenerateUtil();
    generatorServiceEntity.generateByTablesWithInjectConfig();           

*可以根據自己項目的需求自定義模版,也可以使用源碼中自帶的模闆生成最基礎的代碼

模闆配置中不傳參數時,預設使用源碼中的模闆。

*詳情參考 MyBatis-Plus 代碼生成器 (http://mp.baomidou.com/guide/generator.html)

*源碼位址 https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main

--------------------- 

原文:https://blog.csdn.net/u011273768/article/details/83058291 

繼續閱讀