开发者社区 问答 正文

在JFinal中对数据库读写分离的实现:报错

首先感谢@JFinal赶在新年之前发布了给力的2.1版本,完美兼顾了Model和Bean

现在我想在Model层面实现对数据库的读写分离,以下是大概思路:

首先在Config中配置了两套数据源,分别面向读取和写入

然后创建了一个MyModel类,继承Model,重写了Model中的find/save/update/delete方法,其实只是在里面增加了一句:this.use(MyConfig.DB_Read_ConfigName) 或者 this.use(MyConfig.DB_Write_ConfigName)

这样的话,用法不变,只是将原来Model的父类由Model改成MyModel即可

为了适应2.1的Generator,我又创建了一个MyBaseModelGenerator类,继承BaseModelGenerator,主要是将其中生成BaseModel的父类从Model替换成了自定义的MyModel,这样的话就是全自动的啦

目前测试通过,而且在使用上和原来一样

只是不清楚频繁的使用use(configName)切换数据源的操作对效率影响大不大?

还有就是如何使Db也能实现读写分离,对于一些动态表的操作就更好了

最后。。。Happy New Year !!!

展开
收起
kun坤 2020-06-06 16:44:31 637 分享 版权
1 条回答
写回答
取消 提交回答
  •   频繁使用 use(configName) 没有任何性能问题,仅仅是为变量赋一个 string 值而已,完全可以忽略######@JFinal######我现在也使用,读用的是视图model,写操作使用的实体表,至于为什么用视图因为现有系统设计等相关才用的视图做的表连接显示实际内容。######

    @JFinal  生成baseModel 表字段全大写,生成的javaBean 字段也是大写的,看着不习惯呢?是BUG么?

    public void setTYPE(java.lang.String TYPE) {
        set("TYPE", TYPE);
    }
    public java.lang.String getTYPE() {
        return get("TYPE");
    }

    ######回复 @裸奔的皮皮虾 : 字段名本来就用了大写,可以通过继承 MetaBuilder 来扩展一下######回复 @JFinal : mysql 数据库######是 oracle 数据库吧? 这里正在改进,搞定后,maven中心库会推送最新版本######

    引用来自“裸奔的皮皮虾”的评论

    @JFinal  生成baseModel 表字段全大写,生成的javaBean 字段也是大写的,看着不习惯呢?是BUG么?

    public void setTYPE(java.lang.String TYPE) {
        set("TYPE", TYPE);
    }
    public java.lang.String getTYPE() {
        return get("TYPE");
    }

    Generator gernerator = new Generator(ds, baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);

    gernerator.setMetaBuilder(new MyMetaBuilder(ds));

    public class MyMetaBuilder extends MetaBuilder {
    
    	public MyMetaBuilder(DataSource dataSource) {
    		super(dataSource);
    	}
    
    	protected String buildAttrName(String colName) {
    		return StrKit.toCamelCase(colName.toLowerCase());
    	}
    
    }
    这样生成出来的就是小写了
    2020-06-08 11:21:20
    赞同 展开评论