1.在<where>标签中为保证某一条件为true,且不影响其他判断条件。最简单的解决方式:
<where><if test="true">GMT_MODIFY = now()</if></where>或者<where><if test="1==1">GMT_MODIFY = now()</if></where>
2.Oracle、MySQL插入时返回主键的操作
Oracle:<insert parameterClass="Cont"><selectKey keyProperty="id" resultClass="java.lang.Long" type="pre">SELECT SEQ_CONT.NEXTVAL AS ID FROM DUAL</selectKey>insert into CONT(ID, NAME, GMT_CREATE, GMT_MODIFY) values (#{id}, #{name}, sysdate, sysdate)</insert>注意:这边的keyProperty="id"中"id"指的是Java对象Cont中的属性,而并非数据库中CONT表的属性。
MySQL:<insert parameterType="Role" useGeneratedKeys="true" keyProperty="roleId">insert into role (name, create_time, update_time) values (#{name,jdbcType=VARCHAR}, now(), now())</insert>注意:role表的role_id字段是自动增长的,所以插入时不需要传入值;keyProperty="roleId"中"roleId"指的是Java对象Role中的属性,而并非数据库中role表的属性。
3.插入、修改时存储创建、修改时间为数据库时间
Oracle:insert into CONT(ID, NAME, GMT_CREATE, GMT_MODIFY) values (#{id}, #{name}, sysdate, sysdate)MySQL:insert into role (name, create_time, update_time) values (#{name,jdbcType=VARCHAR}, now(), now())
4.关系运算符的处理及转义
主要处理的是小于/小于等于符号(”<“/”<=“)与XML的尖括号”<“之间的冲突。可以用以下代码解决:
<where><if test="id != null"><![CDATA[ AND T.ID < #{id} ]]></if>...</where>包含在<![CDATA[ ]]>之间即可避免
或者直接进行转义
<where><if test="id != null"><!-- 大于号(>) -->AND T.ID >= #{id, jdbcType=BIGINT}</if><if test="id != null"><!-- 小于号(<) -->AND T.ID <= #{id, jdbcType=BIGINT}</if>...</where>
常用转义字符如下:
显示结果 |
描述 |
实体名称 |
实体编号 |
|
空格 |
|
  |
< |
小于号 |
< |
< |
> |
大于号 |
> |
> |
& |
和号 |
& |
& |
" |
引号 |
" |
" |
5.批量插入、修改、删除操作
注意SQL不能超长
版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1