问题描述
需要完成的功能如下表结构大概如下目前完成的代码多表多条件且条件数目不明确,所以在java代码中有各种判断目前搞定单条件的,那么2个条件3个条件4个条件算下来的话会有很多条件组合的模式出现,如果向以上一个个if去写代码会很臃肿,很奇葩....求各位遇到类似情况的大爷...指点迷津..求好的程序方案!
解决方案
解决方案二:
个人建议:你的sql里面还是把所有参数写全.然后再程序判断里面判断传入参数是否为空,不为空就填写参数进去,否则不填就是。或者将可能出现的所有字段用一个对象封装起来,然后通过判断不同的属性值是否为空来拼接sql的where条件。同样可实现。
解决方案三:
条件不确定,但是你可以在你查询的form表里定义四个hidden的input标签,分别对应这四个条件,你做好判断,如果选择了某个条件,你就对应地给那个hidden赋值,后台就会变得非常简单了,你只需要判断每个条件是否为null就可以拼装sql了:if(!StringUtils.isEmpty(type)){hql.append("andx.type=?");params.add(type);}
解决方案四:
<sqlid="selectPmoAgent_where"><where>VALID!=0<iftest="id!=nullandid!=''">andID=#{id}</if><iftest="name!=nullandname!=''">andNAMElike'%${name}%'</if><iftest="manager!=nullandmanager!=''">andMANAGER=#{manager}</if><iftest="managerPhone!=nullandmanagerPhone!=''">andMANAGER_PHONE=#{managerPhone}</if><iftest="parentId!=nullandparentId!=''">andPARENT_ID=#{parentId}</if><iftest="agentLevel!=nullandagentLevel!=''">andAGENT_LEVEL=#{agentLevel}</if><iftest="remark!=nullandremark!=''">andREMARK=#{remark}</if><iftest="createDate!=nullandcreateDate!=''">andCREATE_DATE=#{createDate}</if><iftest="createUser!=nullandcreateUser!=''">andCREATE_USER=#{createUser}</if><iftest="updateDate!=nullandupdateDate!=''">andUPDATE_DATE=#{updateDate}</if><iftest="updateUser!=nullandupdateUser!=''">andUPDATE_USER=#{updateUser}</if></where></sql>
上面是我写的一个ibatis的一个配置。这个就是通过传入参数是否为空来判断是否拼接sql
解决方案五:
个人建议还是sql还是不要自己拼的好,有时间的话可以看看mybatis的用法。没时间的话。按1L的做法就好。
解决方案六:
只需要判断并拼接where条件,看#3一目了然。
解决方案七:
if(typeid!=0){aTypeid="andtypeid="+typeid;}if(sstrate!=2){aSstrate="andsstrate="+sstrate;}if(!text.equals("")){aSname="andsnamelike'%"+text+"%'";}Stringsql="FromStrategyswhereuserid="+userid+"andstype="+stype+aTypeid+aSstrate+aSname+"orderbysiddesc";可以这样拼接提出公用的然后安得根据条件判断添加
解决方案八:
好就这么定了,按3#的做,doit。no纠结