Xml代码
parameterClass="long">
delete from
MemberAccessLog
where
accessTimestamp = #value#
(2) 输入参数为一个对象
Xml代码
parameterClass="com.fashionfree.stat.accesslog.model.MemberAccessLog>
insert into MemberAccessLog
(
accessLogId, memberId, clientIP,
httpMethod, actionId, requestURL,
accessTimestamp, extend1, extend2,
extend3
)
values
(
#accessLogId#, #memberId#,
#clientIP#, #httpMethod#,
#actionId#, #requestURL#,
#accessTimestamp#, #extend1#,
#extend2#, #extend3#
)
(3) 输入参数为一个java.util.HashMap
Xml代码
parameterClass="hashMap"
resultMap="getActionIdAndActionNumber">
select
actionId, count(*) as count
from
MemberAccessLog
where
memberId = #memberId#
and accessTimestamp > #start#
and accessTimestamp <= #end#
group by actionId
(4) 输入参数中含有数组
Xml代码
update
Question
set
status = #status#
#actionIds[]#
说明:actionIds为传入的数组的名字;
使用dynamic标签避免数组为空时导致sql语句语法出错;
使用isNotNull标签避免数组为null时ibatis解析出错
(5)传递参数只含有一个数组
Xml代码
resultClass="hashMap">
select
moduleId, actionId
from
StatMemberAction
#[]#
order by
moduleId
说明:注意select的标签中没有parameterClass一项
另:这里也可以把数组放进一个hashMap中,但增加额外开销,不建议使用
(6)让ibatis把参数直接解析成字符串
Xml代码
parameterClass="hashMap" resultClass="int">
select
count(distinct memberId)
from
MemberAccessLog
where
accessTimestamp >= #start#
and accessTimestamp < #end#
and actionId in $actionIdString$
说明:使用这种方法存在sql注入的风险,不推荐使用
(7)分页查询 (pagedQuery)
Java代码
parameterClass="hashMap" resultMap="MemberAccessLogMap">
parameterClass="hashMap" resultClass="int">
select
accessLogId, memberId, clientIP,
httpMethod, actionId, requestURL,
accessTimestamp, extend1, extend2,
extend3
from
MemberAccessLog
accessTimestamp <= #accessTimestamp#
select
count(*)
from
MemberAccessLog
limit #startIndex# , #pageSize#
说明:本例中,代码应为:
HashMap hashMap = new HashMap();
hashMap.put(“accessTimestamp”, someValue);
pagedQuery(“com.fashionfree.stat.accesslog.selectMemberAccessLogBy”, hashMap);
pagedQuery方法首先去查找名为com.fashionfree.stat.accesslog.selectMemberAccessLogBy.Count 的mapped statement来进行sql查询,从而得到com.fashionfree.stat.accesslog.selectMemberAccessLogBy查询的记录个数,
再进行所需的paged sql查询(com.fashionfree.stat.accesslog.selectMemberAccessLogBy),具体过程参见utils类中的相关代码
(8)sql语句中含有大于号>、小于号<
1. 将大于号、小于号写为: > < 如:
Xml代码
delete from
MemberAccessLog
where
accessTimestamp <= #value#
2. 将特殊字符放在xml的CDATA区内:
Xml代码
delete from
MemberAccessLog
where
accessTimestamp <= #value#
]]>
推荐使用第一种方式,写为< 和 > (XML不对CDATA里的内容进行解析,因此如果CDATA中含有dynamic标签,将不起作用)
(9)include和sql标签 将常用的sql语句整理在一起,便于共用:
Xml代码
select
samplingTimestamp,onlineNum,year,
month,week,day,hour
from
OnlineMemberNum
where samplingTimestamp <= #samplingTimestamp#