参数为HashMap形式的增删改查命名SQL

本文介绍如何处理表单数据并将其正确地映射到SQL语句中,重点讲解了如何处理空值及日期类型的转换。通过使用parameterMap,能够自动处理字段的空值情况,并提供了一种避免SQL语法错误的方法。

表单的各字段,都是string类型提交到服务器的。所以可以直接用##加入数据库中,其中要注意的是日期birthday”2017-07-12”也是字符串类型,如果该表单字段未输入内容,则提交到服务器时用null取代而不是空字符串形式。所以在命名sql编写时,最好使用parameterMap形式,这样可以自动转换数据格式,而排出应表单输入为空,而自动填入null形式而报sql语法错误。
转为数据库中date格式时直接 to_Date(#birthday#,’yyyy-MM-dd’)。


delete

<sqlMap>
     <delete id="delete" parameterClass="commonj.sdo.DataObject">
        <![CDATA[delete from O_OPERATOR where OPERATOR_ID = #operatorId#]]>
     </delete>
</sqlMap>

select

<sqlMap>
    <select id="selectUser" parameterClass="commonj.sdo.DataObject" resultClass="commonj.sdo.DataObject">
        <![CDATA[select OPERATOR_ID "operatorId",
                        USER_ID "userId",
                        USER_NAME "userName",
                        BIRTHDAY "birthday",
                        GENDER "gender",
                        POSTCODE "postcode",
                        ADDRESS "address",
                        PHONE "phone",
                        EMAIL "email",
                        MEMO "memo"
         from O_OPERATOR where 1=1]]>
        <isNotNull  property="userName">
             and USER_NAME = '$userName$'
        </isNotNull>
    </select>
</sqlMap>

update

<sqlMap>
    <update id="updateUser" parameterClass="java.util.HashMap">
    <![CDATA[update O_OPERATOR set USER_ID=#userId#, 
                                   USER_NAME=#userName#, 
                                   BIRTHDAY=to_Date(#birthday#,'yyyy-MM-dd'), 
                                   GENDER=#gender#, 
                                   POSTCODE=#postcode#, 
                                   ADDRESS=#address#, 
                                   PHONE=#phone#]]>
                                   <isNotNull  property="email">                表单提交时,若该字段提交时为空,则
                                    ,EMAIL='$email$'                      email属性为null,用sql更新语句时,会报错
                                    </isNotNull>                            这里用<isnotnull>来实现为空则不插入该字段
                                   <isNotNull  property="memo">             或者用下面的方式,通过<parameterMap>方式
                                    ,MEMO='$memo$'                       若字段为null,则自动不传入值。
                                    </isNotNull>
              where OPERATOR_ID=#operatorId#
    </update>
</sqlMap><sqlMap>
    <parameterMap class="java.util.HashMap" id="parameterMap">
       <parameter javaType="string" jdbcType="VARCHAR" property="userId"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="userName"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="birthday"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="gender"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="postcode"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="address"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="phone"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="email"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="memo"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="operatorId"/>
    </parameterMap>

    <update id="updateUser" parameterMap="parameterMap">
    <![CDATA[update O_OPERATOR set USER_ID=?, 
                                   USER_NAME=?, 
                                   BIRTHDAY=to_Date(?,'yyyy-MM-dd'), 
                                   GENDER=?, 
                                   POSTCODE=?, 
                                   ADDRESS=?, 
                                   PHONE=?,
                                    EMAIL=?,
                                    MEMO=?
              where OPERATOR_ID=?]]>
    </update>
</sqlMap>

insert

<sqlMap>
    <insert id="insertUser" parameterClass="commonj.sdo.DataObject">
    <![CDATA[insert into O_OPERATOR (
            OPERATOR_ID,USER_ID,USER_NAME,BIRTHDAY,GENDER,POSTCODE,ADDRESS,PHONE,EMAIL,MEMO) 
            values (#operatorId#,#userId#,#userName#,to_Date(#birthday#,'yyyy-MM-dd'),
            #gender#,#postcode#,#address#,#phone#,#email#,#memo#)]]>
    </insert>
</sqlMap><sqlMap>
    <parameterMap class="java.util.HashMap" id="parameterMap">
       <parameter javaType="string" jdbcType="INTEGER" property="operatorId"/>
       <parameter javaType="string" jdbcType="INTEGER" property="userId"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="userName"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="birthday"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="gender"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="postcode"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="address"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="phone"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="email"/>
       <parameter javaType="string" jdbcType="VARCHAR" property="memo"/>
    </parameterMap>

    <insert id="insertUser" parameterMap="parameterMap">
    <![CDATA[insert into O_OPERATOR (
            OPERATOR_ID,USER_ID,USER_NAME,BIRTHDAY,GENDER,POSTCODE,ADDRESS,PHONE,EMAIL,MEMO) 
            values (?,?,?,?,?,?,?,?,?,?)]]>
    </insert>
</sqlMap>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值