Mybatis中的常用OGNL表达式
作者:Moss 发布时间:2023-09-29 10:48:33
标签:Mybatis,OGNL,表达式
在Mybatis的动态SQL和${}形式的参数中都用到了OGNL表达式。
Mybatis常用的OGNL表达式如下
1、e1 or e2:或
<if test="userEmail != null or userEmail == '1'">
</if>
2、e1 and e2:且
<if test="userEmail != null and userEmail != ''">
</if>
3、e1 == e2 或e1 eq e2:相等
<if test="userEmail == null and userEmail == ''">
</if>
4、e1 != e2 或 e1 neq e2:不等
<if test="userEmail != null and userEmail != ''">
</if>
5、e1 lt e2:小于
<if test="age lt 10">
#{userEmail,jdbcType=VARCHAR},
</if>
6、e1 lte e2:小于等于
7、e1 gt e2:大于
8、e1 gte e2:大于等于
9、 e1 + e2(加),e1 - e2(减),e1 * e2(乘),e1/e2(除),e1%e2(余)
10、!e或not e:非,取反
11、e.method(args):调用对象方法
<if test="list != null and list.size() > 0 ">
#{userEmail,jdbcType=VARCHAR},
</if>
12、e.property:对象属性值
<!-- 多接口参数的查询方法(@Param + javaBean方式) -->
<select id="selectByUserIdAndEnabledUseBean" resultMap="BaseResultMap">
select r.id, r.role_name, r.enabled, r.create_by, r.create_time,
u.user_name as "user.userName", u.user_email as "user.userEmail"
from sys_user u
inner join sys_user_role ur on u.id = ur.user_id
inner join sys_role r on ur.role_id = r.id
where u.id = #{user.id} and r.enabled = #{role.enabled}
</select>
13、e1[e2]:按索引取值(List、数组和map)
14、@class@method(args):调用类的静态方法
<bind name="name" value="@ex.mybatis.rbac.mapper.UserMaperTest@setName()"/>
15、@class@field:调用类的静态字段值
<bind name="name" value="@ex.mybatis.rbac.mapper.UserMaperTest@NAME"/>
Mybatis jstl表达式
写了一个特别简单的小例子,使用struts1+mybatis+spring,,,其中做了一个增删改查,
结果遇到了一个特别无知的错误!以后一定要记住,不能再犯了!
我在数据库中建的表的字段是xx_xx这种格式的,例如notice_title,在pojo实体类中定义的属性是noticeTitle这种形式的,
在做查找所有数据的时候,sql语句中对各个字段起了别名,但是别名没有与pojo类的属性名对应,导致resultMap对应的类不能与自己起的别名对应,导致不能进行实体类封装值
public ActionForward show(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
List<Notice> noticeList = noticeService.getNoticeList();
request.setAttribute("noticeList", noticeList);
return mapping.findForward("begin");
}
<table border="1">
<tr>
<td>选择</td>
<td>主题</td>
<td>内容</td>
<td>发表时间</td>
<td>备注</td>
<td>编辑人员</td>
</tr>
<c:forEach var="notices" items="${requestScope.noticeList }" >
<tr>
<td><input type="checkbox" name="keyid" value="${notices.keyid}"/></td>
<td>${notices.noticeTitle}</td>
<td>${notices.noticeContent }</td>
<td>${notices.noticePublishTime}</td>
<td>${notices.noticeComment}</td>
<td>${notices.noticeEditor }</td>
</tr>
</c:forEach>
</table>
来源:https://blog.csdn.net/q283614346/article/details/83119073


猜你喜欢
- 功能需求 最近项目中有这么一个功能,用户登录系
- 使用GroupingSearch对搜索结果进行分组Package org.apache.lucene.search.grouping Des
- 在Word插入分页符可以在指定段落后插入,也可以在特定文本位置处插入。本文,将以Java代码来操作以上两种文档分页需求。下面是详细方法及步骤
- 1. 线程转储简介线程转储(Thread Dump)就是JVM中所有线程状态信息的一次快照。线程转储一般使用文本格式, 可以将其保存到文本文
- 面对android studio Run 一次项目要等好几分钟的痛点,不得不研究一下android studio 的单元测试。其实我的目的很
- 具体解释请仔细看注释里已经讲解的很细致了,这里就不多废话了using UnityEngine;using System.Collection
- 身为一名开发人员,大家都知道,我们经常会在项目中大量的编写许多重复的代码,比如说public Entity find(String id);
- 一、为什么按值调用和按引用调用?方法或函数可以通过两种方式调用。一种是按值调用,另一种是按引用调用,这两种方式通常根据作为输入或参数传递给它
- 1.指针指针就是地址(即一个数据)。2.指针变量2.1概念(1)指针变量是变量,是变量在内存中就会开辟空间,会有自己对应的的地址,有自己的变
- 推荐教程:idea2021以下版本适用,通过无限重置试用持续激活:https://www.jb51.net/article/198343.h
- 线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开启好几个下载通道。当服务器提供下载服务时,使用下载者是共享带宽的
- Q 1: 指定 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 好像并不能隐藏导航栏和状态栏?A: 您需要告诉系
- 1、java 的下载和安装一、安装JDKjava下载网址 或者 点击这里根据自己操作系统和系统位数下载相应的JDK安装
- 大家好,今天我们继续来学习Android 8.0系统的适配。之前我们已经讲到了,Android 8.0系统最主要需要进行适配的地方有两处:应
- JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mp
- 说到java中的重载和覆盖呢,大家都很熟悉了吧,但是呢我今天就要写这个。本文主题:一.什么是重载二.什么是覆盖三.两者之间的区别重载(ove
- 题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。经典题,不多说,直接上代码import java.
- 前言之前学习的顺序表查询非常快,时间复杂度为O(1),但是增删改效率非常低,因为每一次增删改都会元素的移动。可以使用另一种存储方式-链式存储
- 1、创建控制台程序如上图所示,选择linux开发平台,我用的VS2019,.Net5.0,一直点下一步,创建。2、创建TCP服务端程序usi
- 1.相关概念Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。建