JFinal Generator 自动生成 和 生成指定表名的 model

上代码:

首先是 JFinal  Generator 生成器的普通用法

package cn.jbolt.common.config;

import javax.sql.DataSource;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;

public class JFinalGenerator  {

//	数据源
	public static DataSource getDataSource() {
		Prop p = PropKit.use("config-dev.properties").appendIfExists("config-pro.properties");
        DruidPlugin druidPlugin = new DruidPlugin(p.get("jdbcUrl"), p.get("user"), p.get("password"));
        druidPlugin.start();
        return druidPlugin.getDataSource();
    }
	
    
    public static void main(String[] args) {
    	
        // base model 所使用的包名
        String baseModelPackageName = "cn.jbolt.common.dao.base_model";
        
        // base model 文件保存路径
        String baseModelOutputDir = PathKit.getWebRootPath() + "/src/main/java/cn/jbolt/common/dao/base_model";
        
        // model 所使用的包名 (MappingKit 默认使用的包名)
        String modelPackageName = "cn.jbolt.common.dao.model";
        
        // model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
        String modelOutputDir =PathKit.getWebRootPath() + "/src/main/java/cn/jbolt/common/dao/model";
        
        // 创建生成器
        Generator generator = new Generator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);
        // 设置是否生成链式 setter 方法
        generator.setGenerateChainSetter(false);
        
        // 添加不需要生成的表名,不添加的将全部生成,其对应的方法是:public void addExcludedTable(String... excludedTables)'
//        generator.addExcludedTable("adv");
        //添加需要生成的表名,用于指定生成哪些表的model
//        generator.setMetaBuilder(new _MetaBuilder(getDataSource()));
        
        // 设置是否在 Model 中生成 dao 对象
        generator.setGenerateDaoInModel(true);
        // 设置是否生成链式 setter 方法
        generator.setGenerateChainSetter(true);
        // 设置是否生成字典文件
        generator.setGenerateDataDictionary(false);
        //设置数据库方言
        generator.setDialect(new MysqlDialect());
        // 设置需要被移除的表名前缀用于生成modelName。例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUser
//        generator.setRemovedTableNamePrefixes("t_");
 
        generator.generate();
    }

}

 自定义的类,继承JFinal 的 MetaBuilder 并重写JFinal 作者给我们留下的方法

package cn.jbolt.common.config;

import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import com.jfinal.plugin.activerecord.generator.MetaBuilder;

public class _MetaBuilder extends MetaBuilder {

	public _MetaBuilder(DataSource dataSource) {
        super(dataSource);
    }
	
 
	/**
	 * 通过继承并覆盖此方法,跳过一些不希望处理的 table,定制更加灵活的 table 过滤规则
	 * @return 返回 true 时将跳过当前 tableName 的处理
	 * true : 不处理
	 * false :处理
	 */
	@Override
	protected boolean isSkipTable(String tableName) {
		
		List<String> createTableList  = new ArrayList<>();
		createTableList.add("base_student");
		
		for(String createTable : createTableList) {
			if(createTable.equals(tableName)) {
				return false;
			}
		}
		return true;
	}
	

}

 

话不多说,有图有真相,首先是普通的生成(JFinal默认会为所有 [有主键的表] 生成model)上图!

然后是指定表的方法

 

 

发布了34 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36623327/article/details/92014266