1 字符串与时间戳的比较
<![CDATA[and aa.INSERTTIME>=to_date(#{condition.joinStartTime},'yyyy-mm-dd')]]>
2 mybatis oracle恶心批量插入方法,oracle id int nextval
insert into tbname (NAME)
select tbname.NEXTVAL,aa.* from(
<foreach collection="list" item="item" index="index" open="(" separator="union all" close=")">
select #{item.name,jdbcType=VARCHAR} from DUAL
</foreach>
)aa
3 传入多个参数时,parameterType作为map,collection则写list变量名
int sce(@Param("gp") GP gp, @Param("id") Integer id);
<select id="sce" resultType="java.lang.String" parameterType="map" >
select name from JSCNGAME.G_A_GROUP where name in
<foreach collection="gp" item="item" index="index" open="(" separator="," close=")">
#{item,jdbcType=VARCHAR}
</foreach>
<if test="id!=null">
and id!=#{id,jdbcType=INTEGER}
</if>
</select>
4 插入新记录的同时返回id值
插入的同时返回id值
<insert id="insert" parameterType="" >
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Long">
select id.nextval as id from DUAL
</selectKey>
insert into tb(id) values (#{id})
</insert>
插入的同时不会返回id值
<insert id="insert" parameterType="com.jscn.game.dmo.res.GResAnswer" >
insert into tb(RESID) values (id.nextval)
</insert>
5 #和$区别及预编译
mybatis #在入参两边加上双引号,作为字符串,$则原样显示,#可以起到过滤的sql注入功能,<![CDATA[]]>也会导致注入
Preparstatment 使用?代替入参,预编译的sql语句在oracle看来是固定的,预编译sql就会类似于函数,直接使用,无需编译,效率提高,存储于缓存