给JFinal的Model添加search,简化简单多条件查询。
给JFinal的Model添加search,简化简单多条件查询。
玛雅牛 发表于5年前
给JFinal的Model添加search,简化简单多条件查询。
  • 发表于 5年前
  • 阅读 3602
  • 收藏 16
  • 点赞 0
  • 评论 6

腾讯云 新注册用户 域名抢购1元起>>>   

改造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);
	}
}
标签: JFinal search
共有 人打赏支持
玛雅牛
粉丝 472
博文 104
码字总数 26328
作品 4
评论 (6)
胡小强
顶下,不错
确实方便多了
JFinal
谢谢分享,顶一个,可以这样获取表名,从而更省代码:
TableInfoMapping.me().getTableInfo(getClass()).getTableName();
玛雅牛

引用来自“JFinal”的评论

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

已经修改代码了。多谢。
真的农夫三拳

引用来自“JFinal”的评论

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

建议将这个方法加入到Model中,否调用时书写太复杂了
huntxt
增加了一些关于MAP的处理,代码:http://my.oschina.net/u/1178318/blog/151941
龅牙驴
@JFinal @玛雅牛 这个模块有计划加到JFinal框架里吗?
×
玛雅牛
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: