数据库查询语句 动态加入查询条件 不区分大小写

画面检索注意事项

1. 如果某个项目没有输入值,则不使用该检索条件。 在sqlMap中可以使用isNotEmpty动态增加WHERE条件。

    <sql id="sql_head">
        SELECT U.USER_ID as idUser,
               U.USER_NAME as userName,
               U.USER_TYPE as userType,
               U.SVC_CTR_CODE as svcCtrCode,
               U.USER_STATUS as userStatus,
               S.SVC_CTR_NAME as svcCtrName
        FROM M_USER U,
             M_SERVICE_CTR S
        WHERE S.IS_DELETED = '0' 
        AND U.SVC_CTR_CODE = S.SVC_CTR_CODE
    </sql>
    <select id="SELECT.A_USR_S02.GET_LIST_USER"
            parameterClass="my.com.honda.servicebooking.a_usr.dto.A_USR_S02_Input"
            resultClass="my.com.honda.servicebooking.a_usr.dto.A_USR_S02_Output">
        <include refid="sql_head" />
        <dynamic prepend="and">
            <isNotEmpty property="userType" prepend="">
                U.USER_TYPE=#userType#
            </isNotEmpty>
        </dynamic>
        <dynamic prepend="and">
            <isNotEmpty property="userStatus" prepend="">
                U.USER_STATUS=#userStatus#
            </isNotEmpty>
        </dynamic>
        <dynamic prepend="and">
            <isNotEmpty property="userName" prepend="">
                upper(U.USER_NAME) like upper('%'||#userName#||'%')
            </isNotEmpty>
        </dynamic> 
        <dynamic prepend="and">
            <isNotEmpty property="idUser" prepend="">
                upper(U.USER_ID) like upper('%'||#idUser#||'%')
            </isNotEmpty>
        </dynamic> 
        <dynamic prepend="and">
            <isNotEmpty property="svcCtrCode" prepend="">
                S.SVC_CTR_CODE=#svcCtrCode#
            </isNotEmpty>
        </dynamic>
        <dynamic>
            ORDER BY UPPER(U.USER_ID) ASC,
                UPPER(U.USER_NAME) ASC
        </dynamic>
    </select>

 

2.对于文本框的检索

  1)不区分大小写,检索项目统一用UPPER函数转为大写后进行匹配。

      例:UPPER(USER_NAME)= UPPER(#name#)

  2)删除检索条件中的前后空白后再检索。即,再传入参数前,需要将用户的输入内容trim。
    3)使用部分一致检索

    i. 使用$。 写成  SELECT * FROM user where name like'%$name$%'

           $name$ 是字面意义的替换,在传入参数时需要先进行SQL的转换。

     ii. 使用#,并且用|| 连接字符串的方式。写成SELECT * FROM user where name like '%'|| #name# || '%'

           #name# 是带类型的替换,没有SQL注入问题。

posted @ 2012-12-06 15:20  chengfang  阅读(229)  评论(0)    收藏  举报