浏览 6124 次
锁定老帖子 主题:mybatis OGNL应用扩展
精华帖 (0) :: 良好帖 (0) :: 新手帖 (12) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-22
mybatis中使用ognl的扩展,实现判断传入的字段: Mapper文件中: <select id="getRecentQuestionTitle" parameterType="java.lang.String" resultType="java.lang.String"> select title from song_question where questionState = #{value} <if test="@Ognl@isSolve(value[0],0)"> order by questionTime desc </if> <if test="@Ognl@isSolve(value[0],1)"> order by answerTime desc </if> limit 0,1 </select> Ognl.java文件: /**使用ognl扩展 * @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); } if(StringUtils.equals(str, soleState)) return true; return false; } 该功能为,根据传入的值, 如果值为0,则order by questionTime desc 根据字段questionTime排序。 如果值为1,则order by answerTime desc根据字段answerTime排序。 Ognl.java 必须放在class目录,也就是没有包名。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-03-23
不太建议将业务逻辑写入SQL中
|
|
返回顶楼 | |
发表时间:2012-03-23
java_user 写道 不太建议将业务逻辑写入SQL中
那就要使用两条sql语句了。 |
|
返回顶楼 | |
发表时间:2012-03-23
如果在sql中用case when 也算是有业务逻辑吧。。
|
|
返回顶楼 | |
发表时间:2012-03-23
qq123zhz 写道 如果在sql中用case when 也算是有业务逻辑吧。。
是啊,要是人员变动或者时间久了这些业务逻辑比较难维护 |
|
返回顶楼 | |
发表时间:2012-03-23
java_user 写道 qq123zhz 写道 如果在sql中用case when 也算是有业务逻辑吧。。
是啊,要是人员变动或者时间久了这些业务逻辑比较难维护 所以写代码要有点深度,不然一直就没什么提升嘛。。 |
|
返回顶楼 | |
发表时间:2012-03-23
直接写在dao的两个变量里,然后<isnotnull>之类的判断不就得了
|
|
返回顶楼 | |
发表时间:2012-03-23
kimmking 写道 直接写在dao的两个变量里,然后<isnotnull>之类的判断不就得了
你这个是ibatis2的写法,mybatis不支持这样写了。。。 |
|
返回顶楼 | |