@Ognl@isNotEmpty() for String,Array,Collection,Map Test
now, test empty string test. must use:
<if test="userId != null && ''.equals(userId)">
and user_id = #{userId}
</if>
but, OGNL support Calling Static Methods.
http://www.opensymphony.com/ognl/html/LanguageGuide/staticMethods.html
so, we can use this for test empty String,Array,Collection,Map.
look like this:
<if test="@Ognl@isNotEmpty(userId)">
and user_id = #{userId}
</if>
source code:
public class Ognl {
/**
* test for Map,Collection,String,Array isEmpty
* @param o
* @return
*/
public static boolean isEmpty(Object o) throws IllegalArgumentException {
if(o == null) return true;
if(o instanceof String) {
if(((String)o).length() == 0){
return true;
}
} else if(o instanceof Collection) {
if(((Collection)o).isEmpty()){
return true;
}
} else if(o.getClass().isArray()) {
if(Array.getLength(o) == 0){
return true;
}
} else if(o instanceof Map) {
if(((Map)o).isEmpty()){
return true;
}
}else {
return false;
}
return false;
}
/**
* test for Map,Collection,String,Array isNotEmpty
* @param c
* @return
*/
public static boolean isNotEmpty(Object o) {
return !isEmpty(o);
}
}
and will put this class to "default package".
要把ognl.java文件放到default package下,否则会报错。。。
错误:ibatis Method "isNotEmpty" failed for object Ognl [java.lang.ClassNotFoundException: java.lang.Ognl]
分享到:
相关推荐
当在SQL字符串中使用`${}`时,MyBatis会使用OGNL解析其中的表达式。例如: ```xml select id,name,... from country != null and name != ''"> name like '${'%' + name + '%'}' ``` 注意,使用...
【标题】"mybatis中使用ognl共4页.pdf.zip" 涉及的主要知识点是MyBatis框架中对OGNL(Object-Graph Navigation Language)表达式的应用。OGNL是一种强大的表达式语言,常用于获取、设置Java对象的属性,以及执行对象的...
Mybatis是一款强大的持久层框架,它允许开发者将SQL语句直接写在XML配置文件...理解并熟练掌握这些动态SQL标签,对于提升Mybatis的使用技能至关重要。在实际开发中,可以根据具体需求灵活运用,使SQL语句更加简洁高效。
2. **mybatis-ognl-x.x.x.jar**:MyBatis使用OGNL(Object-Graph Navigation Language)表达式语言来处理结果映射和参数映射。这个jar文件包含了OGNL的实现,用于在对象图中导航和操作数据。 3. **mybatis-spring-x...
3. **mybatis-ognl-x.x.x.jar**:MyBatis使用OGNL(Object-Graph Navigation Language)作为表达式语言,用于对象属性的访问和表达式的计算。OGNL jar包提供了对对象属性的动态访问能力,使得我们可以用简洁的表达式...
- ognl-x.x.x.jar:Object-Graph Navigation Language,MyBatis使用OGNL作为表达式语言来访问对象属性。 - ...其他可能的依赖,如 Commons-logging、guava 等。 3. **文档**:可能包含MyBatis的官方文档,如PDF或...
10. **ognl-x.x.x.jar**:Object-Graph Navigation Language (OGNL) 是一个强大的表达式语言,MyBatis使用OGNL来解析和执行SQL中的动态条件,以及在结果映射中的属性获取。 以上就是MyBatis框架通常会用到的一系列...
MyBatis使用OGNL作为其默认的表达式语言,用于动态SQL中的条件判断和值传递。 9. commons-logging-1.2.jar:Apache Commons Logging是Java的日志抽象层,允许开发者选择具体的日志实现。MyBatis使用它来实现日志...
5. `ognl-x.x.x.jar`:Object-Graph Navigation Language,MyBatis使用OGNL作为表达式语言,处理动态SQL和对象属性的获取与设置。 这些jar包共同构成了MyBatis运行的基础环境,确保了与数据库的交互、日志记录以及...
执行时,MyBatis使用OGNL表达式计算变量的值,根据计算结果动态生成SQL,从而实现SQL的动态拼接,提高了代码的可读性和灵活性。 #{}和${}的区别在于:#{}是预编译处理,相当于PreparedStatement中的占位符,能够...
MyBatis使用OGNL(对象图导航语言)来计算SQL参数对象中的表达式值,并根据表达式的结果动态生成SQL语句。 MyBatis中的#{}和${}是两种不同的参数占位符。#{}是预编译处理,可以防止SQL注入,而${}是简单的字符串...
动态SQL的执行原理是,MyBatis使用OGNL语言解析表达式,根据表达式的值动态生成SQL,从而达到动态SQL的效果。 **#{}和${}的区别** #{}和${}是MyBatis中的参数占位符。#{}是预编译处理,适用于PreparedStatement,...
- 执行原理是MyBatis使用OGNL语言表达式从SQL参数对象中获取值,根据表达式的计算结果动态拼接SQL,以实现SQL的动态生成。 4. **缓存机制** - **一级缓存**:基于PerpetualCache的HashMap,作用域是Session。当...
5. **上下文和值栈**:ognl使用值栈来管理其执行环境,允许在表达式中引用栈上的对象。 6. **表达式缓存**:ognl有表达式编译和缓存机制,以提高性能。 源码分析的关键部分包括: - **Parser**:ognl的解析器将...
2. **mybatis-ognl-x.x.x.jar**:MyBatis默认使用OGNL(Object-Graph Navigation Language)作为表达式语言来处理动态SQL。OGNL提供了一种强大的方式来获取和设置Java对象的属性。 3. **mybatis-spring-x.x.x.jar**:...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 标题中的“mybatis相关资料”表明这是一个关于MyBatis框架的学习资源...
标题:“spring mybatis 3.x 使用图文” 描述:“spring mybatis 3.x详解” ### Spring与MyBatis 3.x整合概述 MyBatis作为一款优秀的持久层框架,以其强大的SQL映射能力和灵活的数据库访问机制,深受广大开发者的...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在mybatis-3.5.6.zip这个压缩包中,包含了MyBatis框架的最新版本3.5.6的...