开发者社区> 问答> 正文

使用jfinal的一点反馈:报错

使用jfinal好一段时间了,真心感谢波波!开发中带来相当多的便利,在此提点个人意见,希望jfinal越做越好。

1.在Model中添加saveOrUpdate方法,记得过去使用hibernate时有这样的方法,很方便,一个对象传过去,没有记录就save,有记录就update,在JFinal中只因为要配置主键,所以只要判断主键是否为空就可以决定采用是save还是update:
boolean result = false;
if(message.get("id")==null){
    result=message.save();
}else{
    result=message.update();
}
2.希望在Model中添加类似:saveBatch(List<? extends Model> list)方法,批量save或者update对象,这样很方便而且带来的是效率的提升。虽然Db有批量方法,但此种情况不适用。
for(VoteItem m:listItem){
    m.set("voteId", voteId);
    m.save();
}
3.获取参数时,getParaToInt类似的方法对于提供默认值的版本方法,比如:
private Integer toInt(String value, Integer defaultValue) {
if (value == null)
     return defaultValue;
if (value.startsWith("N") || value.startsWith("n"))
    return -Integer.parseInt(value.substring(1));
 return Integer.parseInt(value);
}
在value判断为null才返回默认值,但我认为,既然选择了带默认值的方法版本,那么只要value转换有问题,就应该返回默认值,这才是提供默认值的意义。波波出于不破坏业务逻辑考虑,让原值转换出错就报异常,这点我不赞同,从使用者来说,如果考虑到这种情况就应该避免使用带默认值的方法版本,让程序抛异常,框架是不应该帮使用者考虑具体的问题。
比如:我希望得到一个:
Integer value = this.getParaToInt("value",null);如果传的是空字符串,此时得到一个null是相当合理的,然而程序此时却是报异常,为了处理这个情况,就要这么做:
Integer value = this.getPara("value",null)==null?null:this.getParaToInt("value");此时的getPara方法就提供了很好的默认值版本方法。
4.对于Model里的getInt方法应该返回基本类型int,而不是返回对象类型的Integer,应提供getParaToInteger这样的方法来返回对象类型,原因如下:
对于Integer类型,像这样定义时:Integer a=100,如果值在-128到127之间时,直接比较,返回的是true,超过范围则返回false:
public static void main(String[] args){
    Integer a = -129;
    Integer b = -129;
    System.out.println(a==b); //false
    a=-128;
    b=-128;
    System.out.println(a==b);//true
    a=127;
    b=127;
    System.out.println(a==b);//true
    a=128;
    b=128;
    System.out.println(a==b);//false
}
这里我不是玩技巧,java对于Integer对象提供了很特别的数值范围,让他们可以进行比较返回true,我们知道对像比较,实际比较的是内存地址,在这个规则下很多java初学者并不知道这样的规则,当直接用getInt获取的值去比较,程序出问题后相当隐蔽,不容易找出问题,这种情况正确的用法是:r.getInt("pId")!=null && record.getInt("id")!=null && 
 r.getInt("pId").intValue()==record.getInt("id").intValue()

展开
收起
kun坤 2020-06-14 13:48:40 391 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
前端自动化测试 立即下载
Storm源码走读笔记 立即下载
如何利用Redisson分布式化传统Web项目 立即下载