文档章节

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

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

© 著作权归作者所有

共有 人打赏支持
玛雅牛

玛雅牛

粉丝 485
博文 113
码字总数 27360
作品 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
JFinal 2.0 发布,JAVA 极速 WEB+ORM 框架

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

JFinal
2015/06/18
26.2K
405
JFinal Extensions 3.0 发布,JFinal 扩展

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

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

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

JFinal
2017/08/08
12.4K
161
JFinal 2.2 发布,用 JFinal 开发,就这么定了!

JFinal 2.2 主要针对于 2.1 版本中反馈集中的几个问题进行改进,另外也让jfinal 2.1非最终版用户升为统一的版本。 1:改进paginate 在2.1 版中使用了正则对paginate方法匹配 select 与 grou...

JFinal
2016/01/19
15.8K
91

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
1
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
4
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
4
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部