MyBatis动态SQL学习

MyBatis动态SQL学习


if标签

如果studentName是null或空字符串,此语句很可能报错或查询结果为空。

此时我们使用if动态sql语句先进行判断,如果值为null或等于空字符串,我们就不进行此条件的判断。

	     
	

此时,当studentName的值为null或’’的时候,我们并不进行where条件的判断,
所以当studentName值为null或’’值,不附带这个条件,所以查询结果是全部。
由于参数是Java的实体类,所以我们可以把所有条件都附加上,使用时比较灵活, 
new一个这样的实体类,我们需要限制那个条件,只需要附上相应的值就会where这个条件,相反不去赋值就可以不在where中判断。

	 
	 

set 和 trim标记的使用 
和之前的where一样,set和trim也是智能标记 
在之前的user.xml中添加

	
		update User
		
			userName=#{userName},
			password=#{password},
		
		where id=#{id}
	

运行,执行的SQL语句是 update User SET userName=?, password=? where id=?
set 自动识别并把sql语句中第二个逗号去掉的。此时数据库user表中id为10的username和password都被修改了。


//trim

trim标识为格式化标识,可以与其他标识完成where和set的功能
prefix  前缀增加   suffix  后缀增加    prefixOverrides 自动判断前置   suffixOverrides 自动判断后置
接着来测试一下,在user.xml中添加

		
		UPDATE User 
      		  
	    		  
            			userName = #{userName},
       	 		
        		  
             			password=#{password},
        		  
	  	

与上面的set语句对比,prefix="SET" 是为SQL语句设置前缀,suffixOverrides是自动判断后缀 ","  
suffix="WHERE id = #{id}" 是自动在加上后缀
运行,执行的SQL代码还是UPDATE User SET userName = ?, password=? WHERE id = ? 
代替where的就是添加 prefix="where"  prefixOverrides="and|or"  trim就会自动的添加前缀where和自动识别和去掉不用的and或or

以下是不熟悉组合运用时分开的写法

    
        INSERT INTO
            ga_dm.t_consumable_info
            (
              
                  consumable_info_no,
                  machine_sn,
                  sw_ver,
                  insert_datetime,
                  update_datetime,
              
            )
        VALUES
            (
              
                  #{consumableInfoNo},
                  #{machineSn},
                  #{swVer},
                  #{insertDatetime},
                  #{updateDatetime},
              
            )
        ;
    

    
        UPDATE
            ga_dm.t_consumable_info
        SET
            
                machine_sn = #{update.machineSn},
                machine_sn = NULL,
                sw_ver = #{update.swVer},
                update_datetime = NULL,
            
        WHERE
            consumable_info_no = #{search.consumableInfoNo}
        ;
    

    
        UPDATE
            ga_dm.t_consumable_info
        
            machine_sn = NULL,
            machine_sn = #{update.machineSn},
            sw_ver = NULL,
            sw_ver = #{update.swVer},
            consumable_start_datetime = NULL,
            update_datetime = NULL,
            update_datetime = #{update.updateDatetime},
        
        WHERE
            consumable_info_no = #{search.consumableInfoNo}
        ;
    

MyBatis动态SQL学习_第1张图片

============

你可能感兴趣的:(mybatis)