文档章节

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

玛雅牛
 玛雅牛
发布于 2013/06/11 14:47
字数 514
阅读 4.3K
收藏 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);
	}
}

© 著作权归作者所有

玛雅牛

玛雅牛

粉丝 487
博文 115
码字总数 28117
作品 4
西安
高级程序员
私信 提问
加载中

评论(6)

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

引用来自“JFinal”的评论

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

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

引用来自“JFinal”的评论

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

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

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

jse7en
2014/03/23
648
4
JFinal 2.0 发布,JAVA 极速 WEB+ORM 框架

JFinal 是本星球第一个提出极速开发理念,也是唯一个极速开发框架。自开源以来迅速获得广大开发者的喜爱,极速开发的优势逐步深入人心。由于极速开发威力巨大,所以有了以下在 OSChina 的惊人...

JFinal
2015/06/18
2.8W
405
JFinal新版sql模板有两种Template的调用方式,你学会了吗?

最近JBolt项目中升级到了最新版JFinal,很平滑,改了个版本号轻松完成。 昨天,突然想起JFinal的新版ChangeLog中提到了Model Db里都增加了关于Sql模板更方便的书写调用方式。 所以,JBolt开发...

山东-小木
2019/06/22
148
0
JFinal Extensions 3.0 发布,JFinal 扩展

Jfinal-ext是对java极速web框架 jfinal 的一个扩充,主要利用jfinal微内核高扩展的特性扩展常用的实用功能和集成各种第三方框架,简化开发者的学习应用成本,为您节约更多时间,去陪恋人、家...

绝望的八皮
2013/09/09
4.2K
28
JFinal 3.2 发布,星星之火已成燎原之势

JFinal第一版于2011年3月诞生于公司内部,应用于公司项目后大受欢迎,一年后于2012年3月18日选择在OSChina社区开源。 历经6年工匠精神的打磨,现已进化成生机勃勃的生态系统,星星之火已成燎...

JFinal
2017/08/08
1.4W
161

没有更多内容

加载失败,请刷新页面

加载更多

PDF如何添加下划线?迅捷PDF编辑器一键添加

“在PDF文件中如何添加下划线?”最近,很多办公室小伙伴都向小编咨询这样一个问题。我们常常需要接触、使用到PDF文件,通过查看、阅读、编辑PDF文件以处理各种各样的学习、工作任务。当我们...

dawda
12分钟前
15
0
go中gin框架+realize实现边写代码边编译,热更新

最近看到了热加载,相关的,就搜索了goland实现热加载 发现了一个插件realize https://github.com/oxequa/realize 然后,为了自己撸代码更方便,配合gin写个教程 1.准备 go get github.com/...

osc_ho8dcqsx
13分钟前
17
0
CAP理论的理解

转自:https://www.cnblogs.com/mingorun/p/11025538.html CAP理论的理解 CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中: 一致性(Consistency) 可用性(Ava...

osc_5rgbamh9
13分钟前
19
0
求所有科目都大于80分的学生姓名

   蠢蠢的我=》 select t1.name from ( select name,count(*) as num from table t where fenshu>80 group by name) t1join( select name,count(kecheng) as num from table group ......

osc_gk4myeyk
15分钟前
13
0
Memcache(1.1)Memcache 基本概述与架构概述

【1】基本概念介绍 官网:https://memcached.org/ 【1.1】memcache与memcached memcache:是早期使用的,与php结合的,是Php中常用的一个原生插件,完全在php框架内开发的 memcached:是建立...

osc_7ie26pzn
16分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部