栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis-动态sql

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis-动态sql

mybatis-动态sql

尚硅谷mybatis实战

动态sql

mybatis-动态sql

1、if的使用(&OGNL):2、choose分支选择:3、set 与if结合的动态更新4、foreach

(1)foreach遍历集合(2)mysql下foreach批量插入的两种方式 5、内置参数:_parameter&_databaseId6、_bind_绑定7、sql标签_抽取可重用的sql片段

• if:判断
• choose (when, otherwise):分支选择;
• trim 字符串截取(where(封装查询条件), set(封装修改条件))
• foreach 遍历集合**

1、if的使用(&OGNL):
	 	
	 		id=#{id}
	 	
	 	
	 		and last_name like #{lastName}
	 		
	 	
	 	
	 	 	and gender=#{gender}
	 	

在if查询时,如果某些条件没带可能sql拼装会有问题
(例如出现select * from tbl_employee where and last_name=?这种问题)
解决方案:
(1)给where后加入 1=1永真判断。

select * from tbl_employee
        
       where 1=1
        
            id=#{id}
         

(2)mybatis使用where标签(封装查询条件)来将所有的查询条件包括在内。

select * from tbl_employee
        
        
            id=#{id}
         

where只会去掉第一个多出来的and或者or.拼接后后面可能也会多出and或者or,可以使用trim.

(3)trim自定字符串截取

 prefix="" (前缀:trim标签体中是整个字符串拼接后的结果。
         prefix给拼串后的整个字符串加一个前缀)
          prefixOverrides=" " (前缀覆盖:去掉整个字符串前面多余的字符)
          suffix=" " (后缀:给拼串后的整个字符串加一个后缀)
          suffixOverrides=" " (后缀覆盖:去掉整个字符串后面多余的字符)
 
2、choose分支选择:

choose (when,otherwise) :分支选择;带了break的swtich-case,如果带了id就用id查,如果带了Name就用Name查;只会进入其中一个。


          select * from tbl_employee
          
              
                
                    id=#{id}
                
                
                    last_name like #{lastName}
                
                
                    gender =0
                
              
          
       
3、set 与if结合的动态更新

set(封装修改条件)


4、foreach (1)foreach遍历集合
  
    
        

         
            select * from tbl_employee
            
                where last_name=#{_parameter.lastName}
            
        

        
            
        

    
6、_bind_绑定
 
    

在模糊查询中可以使用bind标签拼接OGNL表达式,但在实际使用中一般在传参时便拼接好了字符串

  EmployeeMapperDynamicSQL mapper = openSession.getMapper(EmployeeMapperDynamicSQL.class);
           Employee employee2=new Employee();
           employee2.setLastName("%e%");
           List list = mapper.getEmpsTestInnerParameter(employee2);
           for(Employee employee : list)
           {
               System.out.println(employee);
           }
7、sql标签_抽取可重用的sql片段
 
    
        
            last_name,email,gender,d_id   
        
        
          
        
    
    
 
        INSERT into tbl_employee(
        
        
            
        
        )
        VALUES
        
            (#{emp.lastName},#{emp.email},#{emp.gender},#{emp.dept.id})
        
    
    
DEBUG 02-08 16:14:46,861 ==>  Preparing: INSERT into tbl_employee( last_name,email,gender,d_id,*** ) VALUES (?,?,?,?) , (?,?,?,?)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号