最近刚接触jfinal,写了点东西,感觉jfinal是一个很优秀的框架,快捷开发,后台代码从搭建到基本完成只用了2天时间(第一天主要是搭建学习了,写代码主要用了低2天的时间)之前是用spring+ mybatis的 mybatis的where自认为处理的相当好,他是动态处理 if 条件判断, jfinal的话 参考了一下网上说的,一般都是在代码里进行拼接,这样写起来相对来说比较麻烦,于是我就想到一个办法,在这里和大家分享一下。
在controller中 , request 有个方法可以吧request中的所有parameter 接收过来, 变成一个 map<String,String[]>, 这时候可不可以 把map 中的value 第一个值当做value , 第二个值传 相对应的 符号呢, 比方说我想查询 name 像 'jim' 的 , 传值的时候, 把 like 一起传过来 key 为 name ,value 为 ['Jim',"like"] 因为 这种查询几乎不会遇到多值的情况(这里说的多值是指的页面送个数组回来),所以说可以这么解决(这里处理的基本上是通用情况,当然特殊情况可以特殊处理嘛。),循环遍历map中的元素,然后取出key做 字段, value中的第二个元素做 条件, value 第一个元素是值,这时候就可以写一个工具类了拼装一下相关的条件。
使用的时候发现一个问题,我有设置的逻辑删除,查询列表的时候不想展示被删除的字段,而且还要分状态展示,而且我删除状态和那些状态是一起的,也就是说我可能在sql中我可能需要传两个相同的key 不同的条件,status=1 and status != -1 ,还有个问题是 直接在request中取出的map, 只能取值不能再put, 这时候我又把这个map 进行了拆分,分成了list ,每个list 中是hashmap 这个hashmap 就是遍历取出的每一个key 和他对应的value(String[]) 这时候这个list 就可以进行add了。
controller中:
service 中:
稍后我吧PageParam 和 pageutil传上来
大家可以做个参考
int pageNumber;
int pageSize;
String select;
String sqlExceptSelect;
Object[] param;
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public String getSqlExceptSelect() {
return sqlExceptSelect;
}
public void setSqlExceptSelect(String sqlExceptSelect) {
this.sqlExceptSelect = sqlExceptSelect;
}
public Object[] getParam() {
return param;
}
public void setParam(Object[] param) {
this.param = param;
}
}