jfinal 2.2 个性化订制Generator

本文介绍如何通过扩展JFinal框架的Generator来自定义数据库表的过滤规则,以跳过特定表的处理过程。通过继承MetaBuilder类并重写isSkipTable方法,实现了对表名包含bak、QRTZ或sdk的表进行过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用jfinal的Generator生成数据库表对应的model的时候,看到此方法:

类MetaBuilder

/**
 * 通过继承并覆盖此方法,跳过一些不希望处理的 table,定制更加灵活的 table 过滤规则
 * @return 返回 true 时将跳过当前 tableName 的处理
 */
protected boolean isSkipTable(String tableName) {
	return false;
}

并不支持通配符也。。。。所以就自己来扩展吧,搞个简单的先凑活着用~

####实现思路为: 实现MyGenerator类,继承Generator,并重写generate()方法。

package com.yunhetong.mq.utils;

import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.activerecord.generator.MetaBuilder;
import com.jfinal.plugin.c3p0.C3p0Plugin;

import javax.sql.DataSource;

/**
 * ModelGenerator
 * 修改完表结构后执行一下main方法即可
 */
public class ModelGenerator {

	public static DataSource getYHTDataSource() {
		String url = "jdbc:mysql://192.168.10.55:3306/yht?useUnicode=true&characterEncoding=UTF-8";
		String username = "username";
		String password = "password";
		C3p0Plugin c3p0Plugin = new C3p0Plugin(url, username, password);
		c3p0Plugin.start();
		return c3p0Plugin.getDataSource();
	}

	public static void genYHTModels(){
		// base model 所使用的包名
		String baseModelPackageName = "com.yunhetong.mq.model.base";
		// base model 文件保存路径
		String baseModelOutputDir = "D:/Desktop/table" + "/src/main/java/com/yunhetong/mq/model/base";

		// model 所使用的包名 (MappingKit 默认使用的包名)
		String modelPackageName = "com.yunhetong.model";
		// model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
		String modelOutputDir = "D:/Desktop/table" + "/src/main/java/com/yunhetong/mq/model";

		// 创建生成器
		Generator gernerator = new Generator(getYHTDataSource(), baseModelPackageName, 
                        baseModelOutputDir, modelPackageName, modelOutputDir);
		gernerator.setMetaBuilder(new MyMetaBuilder(getYHTDataSource()));
		// 添加不需要生成的表名
		gernerator.addExcludedTable("cm_*","um_*","res_*","qrtz_*");
		// 设置是否在 Model 中生成 dao 对象
		gernerator.setGenerateDaoInModel(true);
		// 设置是否生成字典文件
		gernerator.setGenerateDataDictionary(true);
		// 设置需要被移除的表名前缀用于生成modelName。
//例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUser
//		gernerator.setRemovedTableNamePrefixes("cm_","um_","res_","qrtz_");
		// 生成
		gernerator.generate();
	}

	public static void main(String[] args) {
		genYHTModels();
	}
}


class MyMetaBuilder extends MetaBuilder {

	public MyMetaBuilder(DataSource dataSource) {
		super(dataSource);
	}

	/**
	 * 通过继承并覆盖此方法,跳过一些不希望处理的 table,定制更加灵活的 table 过滤规则
	 * @return 返回 true 时将跳过当前 tableName 的处理
	 */
	@Override
	protected boolean isSkipTable(String tableName) {
		if(tableName.contains("bak") || tableName.contains("QRTZ") || tableName.contains("sdk")){
			return true;
		}else{
			return false;
		}
	}
}

转载于:https://my.oschina.net/hzchenyh/blog/733584

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值