mybatis中使用OGNL表达式
MyBatis常用OGNL表达式:
- e1 or e2
- e1 and e2
- e1 == e2,e1 eq e2
- e1 != e2,e1 neq e2
- e1 lt e2:小于
- e1 lte e2:小于等于,其他gt(大于),gte(大于等于)
- e1 in e2
- e1 not in e2
- e1 + e2,e1 * e2,e1/e2,e1 - e2,e1%e2
- !e,not e:非,求反
- e.method(args)调用对象方法
- e.property对象属性值
- e1[ e2 ]按索引取值,List,数组和Map
- @class@method(args)调用类的静态方法
- @class@field调用类的静态字段值
实例
userDao.xml
内容:
<select id="doOgnl" resultType="com.gml.tower.user.user.persistence.domain.UserDo">
SELECT
*
FROM
t_user
WHERE
is_delete=0
<if test="@org.apache.commons.lang3.ArrayUtils@contains(arr, param)==true">
and mobile like concat('%',#{param},'%')
</if>
</select>
UserManager.java
内容:
@Service("userManager")
public class UserManager {
@Autowired
private UserDao userDao;
public List<UserDo> doOgnl(){
String[] arr = new String[]{"18978904345","18478904345"};
String param = "18978904345";
List<UserDo> userDos = userDao.doOgnl(arr,param);
return userDos;
}
}
UserDao.java
内容:
public interface UserDao {
List<UserDo> doOgnl(@Param("arr") String[] arr, @Param("param") String param);
}
测试案例:
@Test
public void doOgnlTest(){
List<com.gml.tower.user.user.persistence.domain.UserDo> userDos = userManager.doOgnl();
System.out.println(JSON.toJSONString(userDos, SerializerFeature.PrettyFormat));
}
测试结果:
//sql
SELECT
*
FROM
t_user
WHERE
is_delete = 0
AND mobile LIKE concat('%', '18978904345', '%');
//result
[
{
"id":6,
"mobile":"18978904345",
"name":"成龙",
"password":"111111",
"username":"爱新觉罗成龙"
}
]