求助:sql转换iBatis

yao_ming_01 2010-11-08 03:36:08

SELECT
ndbptbl1.touroku_no AS "difd01tourokuNo",
t1.department_cd AS "difd01departmentAreaCd",
t2.department_cd AS "difd01departmentCityCd",
t1.department_name AS "difd01departmentNm1",
t2.department_name AS "difd01departmentNm2",
TO_CHAR(ndbptbl1.status_haaku_dtime,'YYYY/MM/DD HH24:MI:SS') AS "difd01statushaakuDtime",
ndbptbl1.report_element1 AS "difd01reportElement1",
ndbptbl1.report_element2 AS "difd01reportElement2",
ndbptbl1.report_element3 AS "difd01reportElement3",
ndbptbl1.report_element4 AS "difd01reportElement4",
ndbptbl1.report_element5 AS "difd01reportElement5",
ndbptbl1.report_element6 AS "difd01reportElement6",
ndbptbl1.report_element7 AS "difd01reportElement7",
ndbptbl1.report_element8 AS "difd01reportElement8",
ndbptbl1.report_element9 AS "difd01reportElement9",
ndbptbl1.report_element10 AS "difd01reportElement10",
ndbptbl1.notes AS "difd01Notes"
FROM ndbpdisokuhoreporttbl ndbptbl1,
(SELECT department_name, department_cd FROM b_m_department_t_i WHERE COMPANY_CD = '003' GROUP BY department_name,department_cd) t1,
(SELECT department_name, department_cd FROM b_m_department_t_i WHERE COMPANY_CD = '002' GROUP BY department_name,department_cd) t2
WHERE
ndbptbl2.Area_Cd = t1.department_cd
AND
ndbptbl2.CITY_CD = t2.department_cd
AND
ndbptbl2.status_haaku_dtime = (SELECT MAX(status_haaku_dtime) FROM ndbpdisokuhoreporttbl WHERE CITY_CD = t2.department_cd GROUP BY CITY_CD)
AND
ndbptbl1.status_haaku_dtime >= TO_DATE(?,'YYYY/MM/DD')
AND
ndbptbl1.status_haaku_dtime <= TO_DATE(?,'YYYY/MM/DD')
AND
ndbptbl1.Area_Cd = ?
AND
ndbptbl1.City_Cd = ?
ORDER BY ndbptbl1.Area_Cd ASC, ndbptbl1.City_Cd ASC,ndbptbl1.status_haaku_dtime DESC


按照以上为的sql语句,用ibatis写的如下

<select id="selectCityDetails" parameterClass="jp.co.ntt_data.ndbp.ndbpdifd.vo.NdbpdifdSelectCityDetailsInput" resultClass="jp.co.ntt_data.ndbp.ndbpdifd.vo.NdbpdifdSelectCityDetailsOuput">
SELECT
ndbptbl1.touroku_no AS "difd01tourokuNo",
t1.department_cd AS "difd01departmentAreaCd",
t2.department_cd AS "difd01departmentCityCd",
t1.department_name AS "difd01departmentNm1",
t2.department_name AS "difd01departmentNm2",
TO_CHAR(ndbptbl1.status_haaku_dtime,'YYYY/MM/DD HH24:MI:SS') AS "difd01statushaakuDtime",
ndbptbl1.report_element1 AS "difd01reportElement1",
ndbptbl1.report_element2 AS "difd01reportElement2",
ndbptbl1.report_element3 AS "difd01reportElement3",
ndbptbl1.report_element4 AS "difd01reportElement4",
ndbptbl1.report_element5 AS "difd01reportElement5",
ndbptbl1.report_element6 AS "difd01reportElement6",
ndbptbl1.report_element7 AS "difd01reportElement7",
ndbptbl1.report_element8 AS "difd01reportElement8",
ndbptbl1.report_element9 AS "difd01reportElement9",
ndbptbl1.report_element10 AS "difd01reportElement10",
ndbptbl1.notes AS "difd01Notes"
FROM
ndbpdisokuhoreporttbl ndbptbl1,
(SELECT
department_name,
department_cd
FROM b_m_department_t_i
<dynamic prepend="WHERE">
COMPANY_CD = '003'
</dynamic>
GROUP BY department_name,department_cd) t1,
(SELECT
department_name,
department_cd
FROM b_m_department_t_i
<dynamic prepend="WHERE">
COMPANY_CD = '002'
</dynamic>
GROUP BY department_name,department_cd) t2
<dynamic prepend="WHERE">
ndbptbl1.Area_Cd = t1.department_cd
AND
ndbptbl1.CITY_CD = t2.department_cd
AND
ndbptbl1.status_haaku_dtime = (SELECT
MAX(status_haaku_dtime)
FROM
ndbpdisokuhoreporttbl
WHERE
CITY_CD = t2.department_cd
GROUP BY CITY_CD)
<isPropertyAvailable property="strat_time">
<isNotEmpty prepend="AND" property="strat_time">
ndbptbl1.status_haaku_dtime >= TO_DATE(#strat_time#,'YYYY/MM/DD')
</isNotEmpty>
</isPropertyAvailable>
<isPropertyAvailable property="end_time">
<isNotEmpty prepend="AND" property="end_time">
ndbptbl1.status_haaku_dtime <= TO_DATE(#end_time#,'YYYY/MM/DD')
</isNotEmpty>
</isPropertyAvailable>
<isPropertyAvailable property="city_cd">
<isNotEmpty prepend="AND" property="area_cd" removeFirstPrepend="false">
ndbptbl1.Area_Cd = #area_cd#
</isNotEmpty>
</isPropertyAvailable>
<isPropertyAvailable property="city_cd">
<isNotEmpty prepend="AND" property="city_cd" removeFirstPrepend="false" >
ndbptbl1.CITY_CD = #city_cd#
</isNotEmpty>
</isPropertyAvailable>

</dynamic>
ORDER BY
ndbptbl1.Area_Cd ASC, ndbptbl1.City_Cd ASC,ndbptbl1.status_haaku_dtime DESC
</select>


当不传任何参数的情况下,全显示是正常的,当传某个参数的时候,会少一个and,怎么写才可以呢,请大家忙帮!
...全文
90 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-11-08
  • 打赏
  • 举报
回复
iBatics其实很简单的,对应上表里的字段跟类的属性就可以了。
至于一些标签,也就那么几种。
yao_ming_01 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zsh0809 的回复:]
“<=”替换为:
<![CDATA[<=]]>

“>=”替换为:
<![CDATA[>=]]>
其他部分全部照写,不需要加任何标签。如果你sql没有问题,那么执行也不会有问题。
[/Quote]

谢谢
「已注销」 2010-11-08
  • 打赏
  • 举报
回复
给你个小例子参考下:
<select id="SelectItemForPreview" parameterClass="TraTransitemView" resultMap="TraTransitemViewResult">
select a.serial,valid, d.display_value AS project_name, a.text_id,a.text_type,a.text_desc,a.text_length,
a.application_type,a.usage,a.valid,b.item_english_content as english_content,a.export_path as export_path
from tra_transitem a left join tra_transitem_content b on a.serial=b.transitem_serial
left join qpcs_parameter d on d.enum_name = 'Project' and d.enum_value =a.project_name
where 1=1

<dynamic>
<isNotEmpty prepend="AND" property="Valid">valid=#Valid#</isNotEmpty>
<isNotEmpty prepend="AND" property="ProjectName">project_name=#ProjectName#</isNotEmpty>
<isNotEmpty prepend="AND" property="TextType">text_type like '%' + #TextType# + '%'</isNotEmpty>

</dynamic>
ORDER BY project_name,application_type,usage,text_id
</select>
「已注销」 2010-11-08
  • 打赏
  • 举报
回复
“<=”替换为:
<![CDATA[<=]]>

“>=”替换为:
<![CDATA[>=]]>
其他部分全部照写,不需要加任何标签。如果你sql没有问题,那么执行也不会有问题。
「已注销」 2010-11-08
  • 打赏
  • 举报
回复
SELECT         
ndbptbl1.touroku_no AS "difd01tourokuNo",
t1.department_cd AS "difd01departmentAreaCd",
t2.department_cd AS "difd01departmentCityCd",
t1.department_name AS "difd01departmentNm1",
t2.department_name AS "difd01departmentNm2",
TO_CHAR(ndbptbl1.status_haaku_dtime,'YYYY/MM/DD HH24:MI:SS') AS "difd01statushaakuDtime",
ndbptbl1.report_element1 AS "difd01reportElement1",
ndbptbl1.report_element2 AS "difd01reportElement2",
ndbptbl1.report_element3 AS "difd01reportElement3",
ndbptbl1.report_element4 AS "difd01reportElement4",
ndbptbl1.report_element5 AS "difd01reportElement5",
ndbptbl1.report_element6 AS "difd01reportElement6",
ndbptbl1.report_element7 AS "difd01reportElement7",
ndbptbl1.report_element8 AS "difd01reportElement8",
ndbptbl1.report_element9 AS "difd01reportElement9",
ndbptbl1.report_element10 AS "difd01reportElement10",
ndbptbl1.notes AS "difd01Notes"
FROM ndbpdisokuhoreporttbl ndbptbl1,
(SELECT department_name, department_cd FROM b_m_department_t_i WHERE COMPANY_CD = '003' GROUP BY department_name,department_cd) t1,
(SELECT department_name, department_cd FROM b_m_department_t_i WHERE COMPANY_CD = '002' GROUP BY department_name,department_cd) t2
WHERE
ndbptbl2.Area_Cd = t1.department_cd
AND
ndbptbl2.CITY_CD = t2.department_cd
AND
ndbptbl2.status_haaku_dtime = (SELECT MAX(status_haaku_dtime) FROM ndbpdisokuhoreporttbl WHERE CITY_CD = t2.department_cd GROUP BY CITY_CD)
AND
ndbptbl1.status_haaku_dtime >= TO_DATE(?,'YYYY/MM/DD')
AND
ndbptbl1.status_haaku_dtime <= TO_DATE(?,'YYYY/MM/DD')
AND
ndbptbl1.Area_Cd = ?
AND
ndbptbl1.City_Cd = ?
ORDER BY ndbptbl1.Area_Cd ASC, ndbptbl1.City_Cd ASC,ndbptbl1.status_haaku_dtime DESC

上面这一段中全部照写,不需要加任何标签。

ndbptbl1.status_haaku_dtime >= TO_DATE(?,'YYYY/MM/DD')
AND
ndbptbl1.status_haaku_dtime <= TO_DATE(?,'YYYY/MM/DD')
这里面的>=和<=需要加上外套,要不会报错。
yao_ming_01 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 maco_wang 的回复:]
判断参数个数如果不为0,就补充个and不行吗?不懂ibatis语法。
[/Quote]

虽然是xml格式,但是不能取到参数的个数,标签就是判断参数是否有,如果有加个and
可以我最开始这样判断,当没有的时候竟然少个and,所以只能用这种笨方法写了。
dawugui 2010-11-08
  • 打赏
  • 举报
回复
不懂,帮顶,学习,蹭分.
yao_ming_01 2010-11-08
  • 打赏
  • 举报
回复

<select id="selectCityDetails" parameterClass="jp.co.ntt_data.ndbp.ndbpdifd.vo.NdbpdifdSelectCityDetailsInput" resultClass="jp.co.ntt_data.ndbp.ndbpdifd.vo.NdbpdifdSelectCityDetailsOuput">
SELECT
ndbptbl1.touroku_no AS "difd01tourokuNo",
t1.department_cd AS "difd01departmentAreaCd",
t2.department_cd AS "difd01departmentCityCd",
t1.department_name AS "difd01departmentNm1",
t2.department_name AS "difd01departmentNm2",
TO_CHAR(ndbptbl1.status_haaku_dtime,'YYYY/MM/DD HH24:MI:SS') AS "difd01statushaakuDtime",
ndbptbl1.report_element1 AS "difd01reportElement1",
ndbptbl1.report_element2 AS "difd01reportElement2",
ndbptbl1.report_element3 AS "difd01reportElement3",
ndbptbl1.report_element4 AS "difd01reportElement4",
ndbptbl1.report_element5 AS "difd01reportElement5",
ndbptbl1.report_element6 AS "difd01reportElement6",
ndbptbl1.report_element7 AS "difd01reportElement7",
ndbptbl1.report_element8 AS "difd01reportElement8",
ndbptbl1.report_element9 AS "difd01reportElement9",
ndbptbl1.report_element10 AS "difd01reportElement10",
ndbptbl1.notes AS "difd01Notes"
FROM
ndbpdisokuhoreporttbl ndbptbl1,
(SELECT
department_name,
department_cd
FROM b_m_department_t_i
<dynamic prepend="WHERE">
COMPANY_CD = '003'
</dynamic>
GROUP BY department_name,department_cd) t1,
(SELECT
department_name,
department_cd
FROM b_m_department_t_i
<dynamic prepend="WHERE">
COMPANY_CD = '002'
</dynamic>
GROUP BY department_name,department_cd) t2
<dynamic prepend="WHERE">
<isPropertyAvailable property="strat_time">
<isNotEmpty prepend="AND" property="strat_time">
ndbptbl1.status_haaku_dtime >= TO_DATE(#strat_time#,'YYYY/MM/DD')
AND ndbptbl1.status_haaku_dtime = (SELECT
MAX(status_haaku_dtime)
FROM
ndbpdisokuhoreporttbl
WHERE
CITY_CD = t2.department_cd
GROUP BY CITY_CD)
AND
ndbptbl1.Area_Cd = t1.department_cd
AND
ndbptbl1.CITY_CD = t2.department_cd
</isNotEmpty>
<isEmpty prepend="AND" property="strat_time">
ndbptbl1.status_haaku_dtime = (SELECT
MAX(status_haaku_dtime)
FROM
ndbpdisokuhoreporttbl
WHERE
CITY_CD = t2.department_cd
GROUP BY CITY_CD)
AND
ndbptbl1.Area_Cd = t1.department_cd
AND
ndbptbl1.CITY_CD = t2.department_cd
</isEmpty>
</isPropertyAvailable>
<isPropertyAvailable property="end_time">
<isNotEmpty prepend="AND" property="end_time">
ndbptbl1.status_haaku_dtime <= TO_DATE(#end_time#,'YYYY/MM/DD')
</isNotEmpty>
</isPropertyAvailable>
<isPropertyAvailable property="city_cd">
<isNotEmpty prepend="AND" property="area_cd" removeFirstPrepend="false">
ndbptbl1.Area_Cd = #area_cd#
</isNotEmpty>
</isPropertyAvailable>
<isPropertyAvailable property="city_cd">
<isNotEmpty prepend="AND" property="city_cd" removeFirstPrepend="false" >
ndbptbl1.CITY_CD = #city_cd#
</isNotEmpty>
</isPropertyAvailable>

</dynamic>
ORDER BY
ndbptbl1.Area_Cd ASC, ndbptbl1.City_Cd ASC,ndbptbl1.status_haaku_dtime DESC
</select>


这样写勉强可以,我也是新学,如果大家有好的方法交流一下,谢谢
叶子 2010-11-08
  • 打赏
  • 举报
回复
判断参数个数如果不为0,就补充个and不行吗?不懂ibatis语法。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧