第十二章MyBatis动态SQL

if标签与where标签

if标签

test如果为true就会拼接查询条件,否则不会

  • 当没有使用@Param,test出现arg0/param1
  • 当使用@Param,test为@Param指定的值
  • 当使用Pojo,test为对象的属性名
select * from car where

	name like concat('%',${name},'%')


	and price=#{price}

...

注意日期不能判断为空字符串

如何所有条件都不满足上述代码会报错

解决

如果用 where 1=1 后面判断必须加and

select * from car where 1=1

	and name like concat('%',${name},'%')


	and price=#{price}

...

where标签

  • 所有条件都为空时,where子句不会生成
  • 自动去掉前面多余的and,or
select * from car 

	
		name like concat('%',${name},'%')
	
	
		and price=#{price}
	

...

trim标签

  • prefix在标签前面动态的添加属性值
  • suffix在标签后面动态的添加属性值
  • suffixOverrides去除标签内容后面中指定的属性值
  • prefixOverrides去除标签内容前面中指定的属性值
select * from car 

	
		name like concat('%',${name},'%')
	
	
		and price=#{price}
	


set标签

  • 主要用在update标签中,只会提交不为空的条件
  • 可以动态去除语句中多余的,
update  car 

	
		name=#{name} , 
	
	
		price=#{price} ,
	

where id=#{id}

choose when otherwise标签

一般在多条件中只执行某一个条件查询

用法类似与 if else if else

selecr * from car

	
		
			name=#{name} 
		
		
			price=#{price} 
		
		
			id=#{id} 
		
	

因为只会满足一种查询条件所有不需要加and


forEach标签

  • collection为循环列表
  • item为循环元素
  • separator为循环元素之间的分隔符
  • open为标签前面加属性值
  • close为标签后面加属性值

批量删除

delete  from car where  id in(
    
        #{item}
    
)

delete  from car where  id in
    
        #{item}
    


delete  from car where  
    
       id=#{item}
    

批量插入

insert into  car( name, price)
values
    
        (#{item.name},#{item.price})
     

sql与include标签

主要用于字段的封装和复用


    id,
    car_num as  carNum,
    brand,
    guide_price as guidePrice,
    produce_time as produceTime,
    car_type as carType



你可能感兴趣的:(MyBatis,sql,mybatis,数据库)