OGNL在Mybatis中的简单使用

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法, 可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存 取对象的属性。这样可以更好的取得数据。

OGNL写法
------

普通的查询标签
<insert><delete><update><select>

String与基本类型 可以直接写成#{_parameter}
自定义类型Message   直接写#{属性名}

集合 数组array[索引](String[])
自定义数组[索引].属性名(Message[])
List list
list写法同上
Map _parameter
大小写敏感,不能写成大写的

foreach标签:
----------

<foreach collection="array" index="i" item="item" separator=",">
separator作用就是去除最后一个逗号

*集合都 可以用它来循环*
list和array中   i:下标(索引)    	 	item值 ----> 简单类型---------
map中 i: keyitem.属性名 --->对象.属性名---两种方式

特殊的操作符:
mod 取余  in 判断值是否在集合中,not in  与前面相反 返回true

if判断语句
------

<if test="command!=null&&! "".equals(command.trim())"> and command=?</if>

<resultMap> 为select查询结果转换为一个javaBean对象,属性对应查询结果集列名
顺序,循环,拼接
循环对应foreach标签
拼接对应if,choose标签
格式化输出标签,拼接后的内容不符合sql语法

where标签:
--------

	<where>
		<if test="条件不为空"/> 
		拼接语句
	<where>
	如果条件都不满足,不输出
	如果多个条件都满足的话,将最前面的and 或者or 去除

set标签:
------

<set>代替update语句中set标签
用where标签用法一样,set标签可以去除多语句拼接的逗号

trim 功能比较多
----------

<trim> 用法和set where差不多
<trim prefix ="where" suffix="test" perfixOvrrides ="and/or" suffixOverrides="," >
	中间写的的条件判断语句,如果满足的话,输出
	prefix代表前缀加where,也可以加其它的
	suffix代表后缀加test,同理
	perfixOvrrides 代表多个and或者or时,去掉第一个
	suffixOverrides代表多个逗号时,去掉最后一个
<trim>

sql标签
-----

	可以定义也常量,要需要的位置进行引用
<sql id="columns">id,name,desc,date</sql>
可以在sql语句中使用include拼接

一对多,多对一标签collection,associaion
------------------------------

一对多关联
在主resultMap中加上一个<collection property="bean属性名" resultMap="子表namespace   .  resultMap的id"/>
多对一关联 
<association proterty="bean属性名" resultMap="主表namespace   .  resultMap的id"/>
resultType的时候可以少写一个resultMap,相对比较方便
但是会带一个问题,
如果bean属性与表列名必须相同
使用resultMap就需要配置列名,属性名,表数值的类型,如varchar
还可以配置typeHandler,类型转换,date,boolean转0或者1


<choose>标签
----------

类似java中的if-elseif 或者swich case
<when test=""></when>
<when test=""></when>
<otherwise></otherwise>这个代表java中的else
</choose>

{} 和${} 使用区别
------------

-#{}会被mybatis解析成预编译的问号?反复执行预编译效果,只是参数不同,有性能上的优势,还可以防止sql注入

${}等同于java代码中变量拼字符串,两边没有加引号的话,是sql语法的

做排序时可以使用 order by ${sage}  
一对多insert时,要取得插入表数据的id值,放入bean中
oseGeneratedKeys="true" keyProperty='id'parameterType="bean类名"


特殊的操作符:
-------

mod 取余 
 in 判断值是否在集合中,
 not in  与前面相反 返回true




OGNL(Object-Graph Navigation Language,对象图导航语言)是一个强大的表达式语言,可以用于Java的各种应用程序,包括Struts、JavaServer Faces、JavaServer Pages等。在MybatisOGNL表达式可以用于Mapper XML文件的各种标签,例如`<if>`、`<where>`、`<set>`、`<foreach>`等标签OGNL表达式可以用于获取Java对象的属性值、调用Java对象的方法、进行算术运算、比较运算、逻辑运算等。例如: ```xml <select id="selectByCondition" resultType="com.example.User"> select * from user where name like #{keyword} and age >= #{minAge} <if test="maxAge != null"> and age <= #{maxAge} </if> </select> ``` 在这个例子,`#{keyword}`、`#{minAge}`、`#{maxAge}`都是OGNL表达式,表示获取Java对象的属性值。例如,如果传入的参数对象是一个`User`对象,那么`#{keyword}`可以表示`user.getKeyword()`方法的返回值,`#{minAge}`可以表示`user.getMinAge()`方法的返回值。 在OGNL表达式,还可以进行算术运算、比较运算、逻辑运算等。例如,`age >= #{minAge}`表示将`age`和`#{minAge}`进行比较,判断`age`是否大于等于`#{minAge}`;`age <= #{maxAge}`表示将`age`和`#{maxAge}`进行比较,判断`age`是否小于等于`#{maxAge}`。 除了基本的运算符和表达式,OGNL还提供了丰富的函数和操作符,例如`in`操作符、`not`操作符、`contains`函数、`size`函数等。这些函数和操作符可以方便地进行集合操作、字符串操作等。在使用OGNL表达式时,需要注意语法的正确性和安全性,以避免可能的安全漏洞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值