`

mybatis OGNL扩展

 
阅读更多

须放在编译类路径下的扩展类

package com.core.dao;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.Collection;
import java.util.Date;
import java.util.Map;

/**
 * @description mybatis ognl表达式扩展
 * @author: goa
 * @date: 2016/1/8 18:55
 * @version: v2.2.0
 */
public class Ognl {
	/**
	 * 使用ognl扩展
	 * 该功能为,根据传入的值,
	 * 如果值为0,则 ... 。
	 * 如果值为1,则 ... 。
	 *
	 * @return
	 */
	public static boolean isSolve(Object o, String soleState) {
		if (o == null) {
			return false;
		}
		String str = null;
		if (o instanceof String[]) {
			String[] objects = (String[]) o;
			str = objects[0];
		} else if (o instanceof Character) {
			Character c = (Character) o;
			str = Character.toString(c);
		} else if (o instanceof String) {
			String s = (String) o;
			str = s;
		}
		if (soleState.equals(str)) {
			return true;
		} else {
			return false;
		}

	}

	/**
	 * 可以用于判断 Map,Collection,String,Array是否为空
	 *
	 * @param o
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static boolean isEmpty(Object o) throws IllegalArgumentException {
		if (o == null)
			return true;
		if (o instanceof String) {
			return StringUtils.isEmpty((String) o);
		} else if (o instanceof Collection) {
			return CollectionUtils.isEmpty((Collection) o);
		} else if (o.getClass().isArray()) {
			return ArrayUtils.isEmpty((Object[]) o);
		} else if (o instanceof Map) {
			MapUtils.isEmpty((Map) o);
		} else if (o instanceof Date) {
			return o == null;
		} else if (o instanceof Number) {
			return o == null;
		} else if (o instanceof Boolean) {
			return o == null;
		} else {
			throw new IllegalArgumentException("Illegal argument type,must be : Map,Collection,Array,String. but was:"
					+ o.getClass());
		}

		return false;
	}

	/**
	 * 可以用于判断 Map,Collection,String,Array是否不为空
	 *
	 * @param o
	 * @return
	 */
	public static boolean isNotEmpty(Object o) {
		return !isEmpty(o);
	}

	public static boolean isNotEmpty(Object... objects) {
		if (objects == null)
			return false;
		for (Object obj : objects) {
			if (isEmpty(obj)) {
				return false;
			}
			;
		}
		return true;
	}

	public static boolean isNotBlank(Object o) {
		return !isBlank(o);
	}

	public static boolean isBlank(Object o) {
		return StringUtils.isBlank((String) o);
	}

	public static boolean isBlank(String str) {
		return StringUtils.isBlank(str);
	}
}

如这样使用: 

 <if test="@com.core.dao.Ognl@isSolve(type,1)"> AND T.N_STATUS=2</if>

分享到:
评论

相关推荐

    mybatis-plus源码

    在MyBatis-Plus源码中,我们可以看到如何实现这些功能,例如,条件构造器是如何通过反射和OGNL表达式解析来动态构建SQL的,BaseMapper和BaseService是如何协同工作的,以及如何通过AutoFillMetaObjectHandler自动...

    MyBatis官方包.rar

    - ognl-x.x.x.jar:Object-Graph Navigation Language,MyBatis使用OGNL作为表达式语言来访问对象属性。 - ...其他可能的依赖,如 Commons-logging、guava 等。 3. **文档**:可能包含MyBatis的官方文档,如PDF或...

    深入理解mybatis原理

    MyBatis能够通过传入的参数动态生成SQL语句,这是通过OGNL(Object-Graph Navigation Language)表达式语言实现的。这种设计让MyBatis具有很好的灵活性和扩展性。参数映射是数据处理层的另一个重要功能,主要涉及...

    springmybatis

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...

    spring、mybatis开发jar包

    3. mybatis-ognl:OGNL(Object-Graph Navigation Language)用于表达复杂的对象导航和操作。 除此之外,可能还会包含一些第三方库的jar包,如: 1. log4j或logback:日志记录框架,用于调试和问题追踪。 2. slf4j...

    mybatis所有jar包

    3. `spring-context`:扩展了`spring-beans`,提供了应用上下文,支持国际化、事件传播、资源加载等功能。 4. `spring-core`:包含了Spring的基本功能,如依赖注入(DI)和资源处理。 5. `spring-expression`(SpEL...

    springboot-mybatis-custom-language-driver.zip

    MyBatis默认提供了基于OGNL的表达式引擎,但有时我们可能需要更复杂或特定的逻辑,这时就需要自定义语言驱动。自定义语言驱动可以让开发者扩展MyBatis的动态SQL能力,实现更加个性化的SQL生成策略。 3. **循环查询...

    struts2+spring+mybatis+easyui的实现

    Struts2还提供了丰富的结果类型,如dispatcher(转发)和stream(流式下载),以及强大的OGNL表达式语言,用于在Action和视图之间传递数据。 **Spring** 是一个全面的Java企业级应用框架,它的核心特性包括依赖注入...

    mybatis3.2.7源码

    MyBatis通过反射和OGNL表达式解析参数。 7. **ResultSetHandler**: 处理SQL查询的结果集,将数据库返回的数据转化为Java对象。它实现了多种策略,如Map、List、单个对象等。 8. **TypeHandler**: 类型处理器负责...

    MyBatis 36道面试题和答案.docx

    MyBatis允许开发者编写插件来拦截和扩展Executor、StatementHandler、ParameterHandler和ResultSetHandler这四个核心接口。插件的编写需要实现Interceptor接口,并重写intercept()方法。通过在插件上添加注解,可以...

    MyBatis完整jar包

    在MyBatis中,OGNL用于在SQL映射文件中解析和执行复杂的表达式。 8. **commons-logging-1.2.jar**:Apache Commons Logging是一个轻量级的日志接口,它允许你在不修改代码的情况下切换底层日志实现。MyBatis利用这...

    mybatis-3源码

    MyBatis 使用反射和OGNL(Object-Graph Navigation Language)来处理参数映射。 7. **ResultSetHandler**: ResultSetHandler 负责解析 SQL 查询的结果集,将其转换为 Java 对象。MyBatis 支持多种结果映射策略,...

    MyBatis动态SQL.pdf

    MyBatis动态SQL的实现主要依赖于强大的**OGNL**(Object Graph Navigation Language)表达式语言。OGNL是一种用于访问和操作对象属性的强大语言,在MyBatis中被用来动态构建SQL语句。通过OGNL,可以根据传入的参数和...

    struts2+spring+mybatis整合所需的基本jar包

    整合这三个框架可以让开发者更高效地构建可维护、可扩展的Web应用程序。本资源提供的"struts2+spring+mybatis整合所需的基本jar包"包含了进行这种整合所需的库文件。 首先,Struts2是基于MVC设计模式的开源Web应用...

    mybatis兼容sql.pdf

    在寻找更优雅的解决方案时,注意到MyBatis的动态SQL功能,尤其是动态标签和OGNL表达式。可以利用这些特性,通过自定义标签配合静态方法来生成特定数据库的SQL片段。MyBatis并不直接支持自定义标签,所以需要对源码...

    MyBatis面试专题1

    MyBatis的插件机制使得开发者可以扩展其功能。插件运行基于Java的动态代理,针对ParameterHandler、ResultSetHandler、StatementHandler和Executor四个接口生成代理对象。开发者需要实现Interceptor接口,重写...

    传智播客mybatis课堂笔记1

    2. **参数映射**:MyBatis支持动态SQL,可以使用OGNL表达式来动态构造SQL,避免了预编译参数的位置硬编码问题。此外,它可以自动将Java对象的属性与SQL参数进行映射,减少了手动设置参数的麻烦。 3. **结果集映射**...

    MyBatis面试专题及答案.pdf

    动态 SQL 的执行依赖于 OGNL 表达式计算,根据表达式的结果动态构建 SQL 语句。 5. **占位符的区别**:`#{}` 与 `${}` 的主要区别在于安全性和处理方式。`#{}` 用于预编译,能防止 SQL 注入,适用于 ...

    struts2、 spring4、 spring mvc、 hibernate4、 mybatis的三大框架(三套)

    Struts2通过OGNL(Object-Graph Navigation Language)表达式语言增强了数据绑定能力,使得模型与视图之间的数据交互更加方便。 2. Spring4:Spring是一个全面的Java企业级应用开发框架,它包括依赖注入(DI)、面向切...

Global site tag (gtag.js) - Google Analytics