1. 程式人生 > >MyBatis從入門到精通:if的用法

MyBatis從入門到精通:if的用法

pass 用戶信息 插入數據 clas 不為 ike 需要 where條件 cti

    <!--
        4.1.1 在WHERE條件中使用if

            需求:
                實現一個用戶管理高級查詢功能,根據輸入的條件去檢索用戶信息。這個功能
                還需要支持以下三種情況:當只有輸入用戶名時,需要根據用戶名進行模糊查
                詢;當只有輸入郵箱時,根據郵箱進行完全匹配;當同時輸入用戶名與郵箱時
                用這兩個條件去查詢匹配的用戶。

            <if>便簽有一個必填的屬性test,test的屬性值是一個符合OGNL要求的判斷表達式,
            表達式的結果可以是true或者false,初次之外所有的的非0值都為true,只有0為false。
            且有如下規則:
                1.判斷條件property!=null或者property==null:適用於任何類型的字段,用於判斷屬性值是否為空
                2.判斷條件property!=‘‘或者property==‘‘:僅適用於String類型的字段,用於判斷是否為空字符串
                3.and和or:當有多個判斷條件時,適用and或or進行連接,嵌套的判斷可以適用小括號分組。
    
--> <!--不能滿足需求的代碼,標記下模糊匹配的寫法--> <select id="selectByUser" resultType="tk.mybatis.simple.model.SysUser"> select id, use_name userName, user_password userPassword, user_email userEmail, user_info userInfo, head_img headImg, create_time createTime from sys_user where user_name like concat(‘%‘,#{userName},‘%‘) and uer_email=#{userEmail}
</select> <!--改進後的代碼--> <select id="selectByUser" resultType="tk.mybatis.simple.model.SysUser"> select id, use_name userName, user_password userPassword, user_email userEmail, user_info userInfo, head_img headImg, create_time createTime from sys_user where 1=1
<if test="userName!=null and userName!=‘‘"> and user_name like concat(‘%‘,#{userName},‘%‘) </if> <if test="userEmail!=null and userEmail!=‘‘"> and user_email = #{userEmail} </if> </select> <!-- 4.1.3 在UPDATE更新列中使用if 需求: 只更新有變化的字段,需要註意,更新的時候不能將原來的值 但沒有發生變化的字段更新為空或null。 --> <!--需求實現的代碼--> <update id="updateByIdSelective"> update sys_user set <if test="userName!=null and userName!=‘‘"> user_name=#{userName}, </if> <if test="userEmail!=null and userEmail!=‘‘"> user_email=#{userEmail}, </if> <if test="userInfo!=null and userInfo!=‘‘"> user_info=#{userInfo}, </if> <if test="headImg!=null"> head_img=#{headImg}, </if> <if test="createTime!=null"> create_time=#{createTime}, </if> id=#{id} where id=#{id} </update> <!-- 4.1.3 在INSERT動態插入列中使用if 需求: 在數據庫中插入數據的時候,如果某一列的參數值不為空,就使用傳入的值,如果傳入 的參數為空,就使用數據庫中的默認值(通常是空),而不使用傳入的空值。 --> <insert id="insert2" useGeneratedKeys="true" keyProperty="id"> INSERT INTO sys_user (id,user_name,user_password, <if test="userEmail!=null and uerEmail!=‘‘"> user_email, </if> user_info,head_img,create_time) VALUES (#{id},#{userName},#{userPassword}, <if test="userEmail!=null and uerEmail!=‘‘"> #{userEmail}, </if> #{userInfo},#{headImg,jdbcType=BLOB},#{createTime,jdbcType=TIMESTAMP}) </insert>

MyBatis從入門到精通:if的用法