ibatis中动态SQL_SELECT(代码复用)

SQL中最复杂的还是查询了,IBATIS的动态SELECT和配合起来的确很猛,

比如ORACLE中分页:

select * from (
       select rownum rn, t.* from (
		select * from myivr_trole    -- 真正的SQL语句
       ) t where rownum <= ?)
where rn > ?

其实上面SQL中真正自己写的只有 select * from myivr_trole 上面的,和下面的是固定的,那么ibatis中可以这么应用

我定义2个片段,一个为上部分SQL,一个为下部分的SQL,分别为sql_select_begin、sql_select_end

 
	select * from (
		select rownum rn,t.* from
	(
 
	 

	 ) t
	 
		
			
				
			
		
	 
	)
	
		
			
				 #start#
				]]>
			 
		
	

并且我将它们放入namespace="common"中,那么我现在写真正的逻辑SQL


	select * from myivr_trole
	
		
			roleId = #id#
		
		
			statu = #statu#
		
		
			upper(ROLENAME) like upper('%'||#name#||'%') ESCAPE '/'
		
		
			upper(ROLEDESP) like upper('%'||#desp#||'%')
		
		
			= #startTime#
			]]>
		
		
			
								
	

最后一步,我将之前的2个片段组合:

那么,现在查所以数据的话会生成SQL:

select * from (
       select rownum rn,t.* from (
		select * from myivr_trole
	) t
) 

如果是分页的话,会生成:

select * from (
       select rownum rn, t.* from (
            select roleid, rolename, roledesp, logtime, statu
	    from myivr_trole
	    where upper(rolename) like upper('%' || ? || '%') escape '/'
	    and upper(roledesp) like upper('%' || ? || '%') 
	) t where rownum <= ?
) where rn > ?

 

现在你应该还可以想到其实select count(*)这个也是重复的,也可以写成一个片段的


	select count(*) from

再查询总记录的时候就可以这样了:

看到没,WHERE条件重复使用了,呵呵,下一篇讲解如何优化SQL。

你可能感兴趣的:(ibaits2.X,高级应用)