修改Jfinal源码完成类似Hibernate的catalog功能

前段时间在社区里面问了这样一个问题:http://www.oschina.net/question/77562_135316 ,想使用一个数据源来完成类似hibernate的catalog的功能,小伙伴儿们的回答很多,我觉得很好,但是我还是想自己看看jfinal的源码,然后改改,目前自己写的项目中正在这样使用,还不知道是否有问题。

1、下载修改过的Jfinal的lib包。

下载地址:http://pan.baidu.com/s/1mY7s2

2、编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	1、catalog 设置后就是使用的当前数据库,在操作表的时候前面都是加上了
	catalog.table_name
	但是如果加上了form_alias 就可以使用 user.user_name
	2、primary_key 如果没有该属性或者属性值为空字符串,默认值是id
 -->
<mappings>
	<mapping table_name="t_pdc_user" catalog="nm366_pdc">
		com.simplejj.frame.ap.dao.TPdcUser
	</mapping>
</mappings>

3、解析配置文件,封装成Mapping类(解析使用的是jsoup

public class Mapping {

	private String tableName;
	private String catalog;
	private String primaryKey;
	private String className;
}
private static void parsePMapping(File file) {
		try {
			Document document = Jsoup.parse(file, "UTF-8");
			Elements elements = document.select("mappings>mapping");
			for (Element element : elements) {
				Mapping mapping = new Mapping();
				mapping.setTableName(element.attr("table_name").trim());
				mapping.setCatalog(StringUtils.isBlank(element.attr("catalog"))?"":element.attr("catalog").trim());
				mapping.setPrimaryKey(StringUtils.isBlank(element.attr("primary_key"))?"id":element.attr("primary_key").trim());
				mapping.setClassName(element.text().trim());
				MAPPINGS.add(mapping);
			}
		} catch (Exception e) {
			logger.error("解析mapping文件"+file.getAbsolutePath()+"错误,系统出错!",e);
		}
	}
4、在插件中配置
@SuppressWarnings("unchecked")
	@Override
	public void configPlugin(Plugins plugins) {
		plugins.add(new SpringPlugin(PathKit.getWebRootPath() + "/WEB-INF/classes/applicationContext.xml"));
		//plugins.add(new EhCachePlugin());
		
		C3p0Plugin c3p0 = new C3p0Plugin(new File(PathKit.getWebRootPath() +"/WEB-INF/" + GLOBAL_PROPERTY_FILE));
		plugins.add(c3p0);
		ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0);
		plugins.add(arp);
		for (Mapping mapping : CfgHelper.MAPPINGS) {
			try {
				arp.addMapping(mapping.getTableName(),mapping.getCatalog(),mapping.getPrimaryKey(),(Class<? extends Model<?>>) Class.forName(mapping.getClassName()));
			} catch (ClassNotFoundException e) {
				logger.error("Class文件没有找到出现异常",e);
			}
		}
	}
强调说明:

这种修改只适合在Action中通过getModel(TPdcUser.class)获得页面参数。如果使用Db类的话,需要自己写catalog,例如:select * from db_1.t_pdc_user

肯定还有很多不合理的地方,先这样使用吧。有问题的话,我在修改修改!


你可能感兴趣的:(Hibernate,jFinal,catalog)