J2EE开发框架搭建(3) - 查询条件封装

这一节主要想要说明一下框架中的查询条件接口

1. 条件查询的整个类结构图

2. 在hqhop-framework-common项目下面查询条件的的目录结构:

3. 打开SearchOperator.java , 该类包含了所有的查询操作符,是一个枚举类型:

public enum SearchOperator {
	eq("等于", "="), ne("不等于", "!="), gt("大于", ">"), gte("大于等于", ">="), lt("小于", "<"), lte("小于等于", "<="), prefixLike("前缀模糊匹配", "like"), prefixNotLike("前缀模糊不匹配", "not like"), suffixLike("后缀模糊匹配", "like"), suffixNotLike("后缀模糊不匹配", "not like"), like("模糊匹配", "like"), notLike("不匹配", "not like"), isNull("空", "is null"), isNotNull("非空", "is not null"), in("包含", "in"), notIn("不包含", "not in"), custom("自定义默认的", null);

	private final String info;
	private final String symbol;

	SearchOperator(final String info, String symbol) {
		this.info = info;
		this.symbol = symbol;
	}

	public String getInfo() {
		return info;
	}

	public String getSymbol() {
		return symbol;
	}

	public static String toStringAllOperator() {
		return Arrays.toString(SearchOperator.values());
	}

	/**
	 * 操作符是否允许为空
	 *
	 * @param operator
	 * @return
	 */
	public static boolean isAllowBlankValue(final SearchOperator operator) {
		return operator == SearchOperator.isNotNull || operator == SearchOperator.isNull;
	}

	public static SearchOperator valueBySymbol(String symbol) throws SearchException {
		symbol = formatSymbol(symbol);
		for (SearchOperator operator : values()) {
			if (operator.getSymbol().equals(symbol)) {
				return operator;
			}
		}
		throw new SearchException("SearchOperator not method search operator symbol : " + symbol);
	}

	private static String formatSymbol(String symbol) {
		if (Utils.isEmpty(symbol)) {
			return symbol;
		}
		return symbol.trim().toLowerCase().replace("  ", " ");
	}
}

4. Searchable抽象类的主要实现都是在SearchRequest中完成的,可以代码较多可以直接查询

5. 查询接口的使用方式:

1)  只有单个单个条件(查询用户age=21的记录)

Searchable searchable = Searchable.newSearchable();
searchable.addSearchFilter("age", SearchOperator.eq, 21);

2) 两个查询条件,用and连接(查询用户name=‘silentwu‘  and age=21的记录

Searchable searchable = Searchable.newSearchable();
searchable.and(SearchFilterHelper.newCondition("age", SearchOperator.eq, 21), SearchFilterHelper.newCondition("name", SearchOperator.eq, "silentwu"));

3. 两个查询条件,用or连接

Searchable searchable = Searchable.newSearchable();
searchable.or(SearchFilterHelper.newCondition("age", SearchOperator.eq, 21), SearchFilterHelper.newCondition("name", SearchOperator.eq, "silentwu"));

时间: 2024-10-08 06:04:19

J2EE开发框架搭建(3) - 查询条件封装的相关文章

J2EE开发框架搭建目录

搭建的一个简单的J2EE开发框架 框架使用到的Java技术: 1. springmvc4   spring4 2. orm使用hibernate4 3. 安全框架使用shiro 4. 数据源使用druid 5. 整个框架使用maven管理 6. 缓存可以使用memcached,ehcached 7. 日志使用slf4j+log4j 项目下载地址:http://pan.baidu.com/s/1sjPSxtj J2EE开发框架搭建(1) - maven搭建多项目 J2EE开发框架搭建(2) - s

J2EE开发框架搭建(6) - 使用hibernate4完成基本Dao的封装

现在orm框架有很多,比如说guzz,hibernate,mybaits....,在封装一个框架的时候我们可以选择一种,也可以选择多种实现,供以后使用选择,这里我只实现了hibernate,目录结构图如下: 1. 首先查询BaseRepository这个接口,该接口泛型 :T 表示实体类型:ID表示主键类型:虽然在框架里面已经提供了查询的结构Searchable,但是Searchable也不能做到无限强大,比如一个多变关联查询,嵌套查询是没有办法完成的,所有只能自己编写sql语句,但是hiber

J2EE开发框架搭建(2) - springmvc4 + spring4 + hibernate4 整合

1. 打开hqhop-framework-parent项目下的pom.xml文件,添加springmvc4 , spring4 , hibernate4 ,以及数据源druid的依赖包,插件,依赖包版本号 <!-- data source 相关jar? --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version&g

J2EE开发框架搭建(1) - maven搭建多项目

如何使用maven搭建多个项目 1. 创建一个maven project 2. 在frame-parent项目上面点击右键,新建Maven Module 3. 完成之后再建立一个web项目 4. 按照是以上的步骤建立,最后我建立的项目目录结构 框架使用到的Java技术: 1. springmvc4   spring4 2. orm使用hibernate4 3. 安全框架使用shiro 4. 数据源使用druid 5. 整个框架使用maven管理 6. 缓存可以使用memcached,ehcach

J2EE开发框架搭建(7) - 用hibernate实现类似mybaits把sql写在配置文字中

为了避免sql编写在Java代码里面,所以实现类型mybaits的功能,把sql语句编写在xml文件中,这样可以统一管理sql语句,维护更加容易. 1. 首先编写配置sql语句的xml的dtd文件,dtd文件主要是规范xml的,在编写sql语句的配置文件中主要有五个标签:select , update , insert , delete , import 其中select有两个属性id(保证所有的sql语句id唯一),resultClass(查询语句返回的对象,可以使具体的实体类,也可以是Map

J2EE开发框架搭建(5) - Java项目开发常用工具类

工具类下项目中的目录位置: 1. 中文转化成拼音.首字母  ,ChineseCharToPinYin,使用这个类的时候必须要加入pinyin.jar,pinyin.jar已经放到hqhop-framework-web项目的lib目录中: 使用方式: ChineseCharToPinYin只提供了两个方法: public static String getPinYin(String src) {.....}      将汉字转换为全拼 public static String getPinYinH

J2EE开发框架搭建(9) - memcached与spring提供的cache接口整合

spring 从3.x就提供了cache接口,spring默认实现的缓存是ehcache,spring的cache接口: public interface Cache { String getName(); Object getNativeCache(); ValueWrapper get(Object key); <T> T get(Object key, Class<T> type); void put(Object key, Object value); void evict

应用程序框架实战二十五:查询条件(规约模式应用)

前面已经做了一些准备工作,本篇将介绍查询条件的封装,它是规约模式的一个应用. 规约使用一个对象来封装谓词,我之前已经介绍过它在验证方面的应用,本篇是规约模式在查询方面的应用. 规约的强大之处在于,能够将一堆杂乱无章的条件判断或查询条件封装起来,以一个清晰的概念来表达,并使得这些谓词具备了可复用的能力. 首先在Util.Domains项目的Repositories目录中创建ICriteria接口,这个接口表示一个查询条件,代码如下. using System; using System.Linq.

jeecg 扩展封装查询条件 时间段查询

使用jeecg框架开发的小伙伴们知道,添加查询条件,通常是我们加一个配置(query="true")就可以将该字段设置为查询条件.简单方便.但是这样的配置查询条件仅适用于输入框输入查询和下拉框查询(如果你配置的该字段使用了replace).显然,这样的查询条件根本满足不了我们的需求,最常见的就是时间段查询,以及时间段与其他字段混合查询的情况,下面简单说一下解决方法. 自定义查询条件, 第一步:将字段中所有配置的query="true",改为query="f