须放在编译类路径下的扩展类
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源码中,我们可以看到如何实现这些功能,例如,条件构造器是如何通过反射和OGNL表达式解析来动态构建SQL的,BaseMapper和BaseService是如何协同工作的,以及如何通过AutoFillMetaObjectHandler自动...
- ognl-x.x.x.jar:Object-Graph Navigation Language,MyBatis使用OGNL作为表达式语言来访问对象属性。 - ...其他可能的依赖,如 Commons-logging、guava 等。 3. **文档**:可能包含MyBatis的官方文档,如PDF或...
MyBatis能够通过传入的参数动态生成SQL语句,这是通过OGNL(Object-Graph Navigation Language)表达式语言实现的。这种设计让MyBatis具有很好的灵活性和扩展性。参数映射是数据处理层的另一个重要功能,主要涉及...
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...
3. mybatis-ognl:OGNL(Object-Graph Navigation Language)用于表达复杂的对象导航和操作。 除此之外,可能还会包含一些第三方库的jar包,如: 1. log4j或logback:日志记录框架,用于调试和问题追踪。 2. slf4j...
3. `spring-context`:扩展了`spring-beans`,提供了应用上下文,支持国际化、事件传播、资源加载等功能。 4. `spring-core`:包含了Spring的基本功能,如依赖注入(DI)和资源处理。 5. `spring-expression`(SpEL...
MyBatis默认提供了基于OGNL的表达式引擎,但有时我们可能需要更复杂或特定的逻辑,这时就需要自定义语言驱动。自定义语言驱动可以让开发者扩展MyBatis的动态SQL能力,实现更加个性化的SQL生成策略。 3. **循环查询...
Struts2还提供了丰富的结果类型,如dispatcher(转发)和stream(流式下载),以及强大的OGNL表达式语言,用于在Action和视图之间传递数据。 **Spring** 是一个全面的Java企业级应用框架,它的核心特性包括依赖注入...
MyBatis通过反射和OGNL表达式解析参数。 7. **ResultSetHandler**: 处理SQL查询的结果集,将数据库返回的数据转化为Java对象。它实现了多种策略,如Map、List、单个对象等。 8. **TypeHandler**: 类型处理器负责...
MyBatis允许开发者编写插件来拦截和扩展Executor、StatementHandler、ParameterHandler和ResultSetHandler这四个核心接口。插件的编写需要实现Interceptor接口,并重写intercept()方法。通过在插件上添加注解,可以...
在MyBatis中,OGNL用于在SQL映射文件中解析和执行复杂的表达式。 8. **commons-logging-1.2.jar**:Apache Commons Logging是一个轻量级的日志接口,它允许你在不修改代码的情况下切换底层日志实现。MyBatis利用这...
MyBatis 使用反射和OGNL(Object-Graph Navigation Language)来处理参数映射。 7. **ResultSetHandler**: ResultSetHandler 负责解析 SQL 查询的结果集,将其转换为 Java 对象。MyBatis 支持多种结果映射策略,...
MyBatis动态SQL的实现主要依赖于强大的**OGNL**(Object Graph Navigation Language)表达式语言。OGNL是一种用于访问和操作对象属性的强大语言,在MyBatis中被用来动态构建SQL语句。通过OGNL,可以根据传入的参数和...
整合这三个框架可以让开发者更高效地构建可维护、可扩展的Web应用程序。本资源提供的"struts2+spring+mybatis整合所需的基本jar包"包含了进行这种整合所需的库文件。 首先,Struts2是基于MVC设计模式的开源Web应用...
在寻找更优雅的解决方案时,注意到MyBatis的动态SQL功能,尤其是动态标签和OGNL表达式。可以利用这些特性,通过自定义标签配合静态方法来生成特定数据库的SQL片段。MyBatis并不直接支持自定义标签,所以需要对源码...
MyBatis的插件机制使得开发者可以扩展其功能。插件运行基于Java的动态代理,针对ParameterHandler、ResultSetHandler、StatementHandler和Executor四个接口生成代理对象。开发者需要实现Interceptor接口,重写...
2. **参数映射**:MyBatis支持动态SQL,可以使用OGNL表达式来动态构造SQL,避免了预编译参数的位置硬编码问题。此外,它可以自动将Java对象的属性与SQL参数进行映射,减少了手动设置参数的麻烦。 3. **结果集映射**...
动态 SQL 的执行依赖于 OGNL 表达式计算,根据表达式的结果动态构建 SQL 语句。 5. **占位符的区别**:`#{}` 与 `${}` 的主要区别在于安全性和处理方式。`#{}` 用于预编译,能防止 SQL 注入,适用于 ...
Struts2通过OGNL(Object-Graph Navigation Language)表达式语言增强了数据绑定能力,使得模型与视图之间的数据交互更加方便。 2. Spring4:Spring是一个全面的Java企业级应用开发框架,它包括依赖注入(DI)、面向切...