怎么样才能让SSI更敏捷

以Ext+Struts+Srping+iBatis组合方式为例,这四个组件分工协作,如何让协作更有效开发更敏捷?

1.Ext作为呈现层,主要作为数据的呈现和数据的组织;

2.Action作为请求和跳转的门面,将Ext中的Json请求数据或者XML请求数据转为Java对象,并调用不同的Service实例进行处理;

3.Spring的DI、AOP、事务管理为开发带来了高效的实现和耦合度的降低。

4.iBatis主要作用实现对象和关系(数据库)的映射。

问题:

查询往往是一个项目或者产品中最为出色、使用频繁的功能,iBatis的强大之处在于手写SQL语句方便灵活,便于实现高效的查询,这一点对于项目特别是大数据量的项目是非常有效的。同时这也是iBatis来说也是很大的缺血,即手写SQL的内容庞大,诸如删除、修改、增加操作往往不需要很大的灵活性,这点Hibernate做的就更出色了,如此iBatis一定程度上也降低了开发的效率。同时iBatis对查询的支持也是有诸多不便之处的。

我们来看这样的一组查询语句:

SELECT field1,field2,field3,....,fieldn,... FROM table_name WHERE expression1 AND expression2 or expression2 ... AND ... or ....ORDER BY field1 ASC, field2 DESC,... 

这样的SQL语句是很普通的查询,如果用iBatis会怎么样呢?下面给出iBatis的一种实现方式:

<select id="identify" resultMap="beanMap">
  SELECT field1,field2,field3,....,fieldn,...  FROM table_name
  <dynamic prepend="WHERE">  
   <isNotEmpty property="property1"  prepend="AND">
    field1= #property1#
   </isNotEmpty >
   <isNotEmpty property="property2" prepend="OR">
    field1 = #property2#
   </isNotEmpty>  ....
  </dynamic>
  ORDER BY field1 ASC, field2 DESC,... 
 </select>

 

这样的iBatis配置SQL语句存在什么问题吗?相信仔细观察我们就能发现问题:

WHERE条件是动态的,其他如查询字段、排序字段都是静态写死了的。当然这样的SQL配置写法能够满足80%以上的查询需求,可是那剩下的20%呢?熟悉二八定律的人都知道20%在项目中的举足轻重,那么我们怎么改造这个SQL语句配置呢?

(待续... ...)

 

你可能感兴趣的:(javaee,SSI,职场,休闲)