使用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()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。