MYBATIS
- 实体类的属性不存在数据库是,映射成null;
- 自动映射实体类与数据库列时会忽略大小写差异;
- 多参数映射采用领域具体类或者hashmap。
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调用类的静态字段值
动态标签
动态标签这要用于根据输入条件的不同,动态地组合sql.传入的参数要提供get,set方法。所以不能是primitive type。
if
如果判定为真,OGNL则保留if标签内内容。
<select id="findActiveBlogWithTitleLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null"> //会调用arg.getTitle()方法进行判断
AND title like #{title}
</if>
</select>
能判断列是否为空,
where
where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。
where标签一般与if标签协同作用
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</where>
</select>
choose when otherwise
实现多选一功能
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
set
update语句时根据输入动态调整更新的字段
<update id="updateAuthorIfNecessary">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>
trim
where与update标签都包含了trim标签功能,
<trim prefix="SET" suffixOverrides=",">
...
</trim>
<trim prefix="WHERE" prefixOverrides=",">
...
</trim>
foreach
foreach标签是对一个集合进行遍历,collection的属性值是参数名,并不是参数的类型。
open开始符,close结束符
index 是当前迭代的次数,item 的值是本次迭代获取的元素。
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
效果是(item1, item2, …, item)
bind
将一个表达式的值绑定到一个符号,调用时使用#{符号}
<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
</select>